亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

組 ID 基于另一列的條件

組 ID 基于另一列的條件

汪汪一只貓 2023-07-11 15:09:57
我有以下數據框:Hotel_id    Month_Year      Chef_Id  Chef_is_masterchef  2400614     May-2015        2297544     0           2400614     June-2015       2297544     0            2400614     July-2015       2297544     0               2400614     August-2015     2297544     0               2400614     September-2015  2297544     0               2400614     October-2015    2297544     0               2400614     November-2015   2297544     0           2400614     December-2015   2297544     0          2400614     January-2016    2297544     1        2400614     February-2016   2297544     1           2400614     March-2016      2297544     1         3400624     May-2016        2597531     0           3400624     June-2016       2597531     0         3400624     July-2016       2597531     0          340624     August-2016     2597531     1           3400624     September-2016  2597531     1           2400133     February-2016   4597531     0           2400133     March-2016      4597531     0               2400133     April-2016      4597531     0         2400133     May-2016        4597531     0               2400133     June-2016       4597531     0           2400133     July-2016       4597531     0           2400133     August-2016     4597531     1           2400133     September-2016  4597531     1               2400133     October-2016    4597531     1               2400133     November-2016   4597531     1               2400133     December-2016   4597531     1               2400133     January-2017    4597531     1           2400133     February-2017   4597531     1               2400133     March-2017      4597531     1           2400133     April-2017      4597531     1         2400133     May-2017        4597531     1       我應該捕獲 Hotel_id,其中 Chef_is_masterchef 列中每個 id 的最少數量應為 3 個 0 和 1,并忽略其他不滿足條件的 Hotel_id。所以在上面的數據框中,有一個id被刪除了。另外,我必須重復相同的過程來獲取另一個數據幀,其中每個 Hotel_id 在 Chef_is_masterchef 列中應具有至少六個 0 和 1 的計數,并忽略其他不滿足條件的 Hotel_id。請讓我知道解決方案。
查看完整描述

1 回答

?
慕雪6442864

TA貢獻1812條經驗 獲得超5個贊

解決方案如果僅01列中的值Chef_is_masterchef

首先對每個組的值進行計數,crosstab并過濾兩列是否具有更多或相等的值 by?N,DataFrame.ge然后DataFrame.all將與這兩個條件匹配的索引值傳遞給Series.isin

N?=?3s?=?pd.crosstab(df['Hotel_id'],?df['Chef_is_masterchef']).ge(N).all(1)

df1?=?df[df['Hotel_id'].isin(s.index[s])]

或者,您可以為調用的測試0值創建新列,并與每組的計數和值一起zeros使用,輸出將傳遞到:GroupBy.transformsum01maskboolean indexing

N?=?3
mask?=?(df.assign(zeros=df['Chef_is_masterchef'].eq(0))
??????????.groupby('Hotel_id')[['Chef_is_masterchef',?'zeros']]
??????????.transform('sum')
??????????.ge(N)
??????????.all(axis=1))
df1?=?df[mask]

print (df1)

? ? Hotel_id? ? ? Month_Year? Chef_Id? Chef_is_masterchef

0? ? 2400614? ? ? ? May-2015? 2297544? ? ? ? ? ? ? ? ? ?0

1? ? 2400614? ? ? ?June-2015? 2297544? ? ? ? ? ? ? ? ? ?0

2? ? 2400614? ? ? ?July-2015? 2297544? ? ? ? ? ? ? ? ? ?0

3? ? 2400614? ? ?August-2015? 2297544? ? ? ? ? ? ? ? ? ?0

4? ? 2400614? September-2015? 2297544? ? ? ? ? ? ? ? ? ?0

5? ? 2400614? ? October-2015? 2297544? ? ? ? ? ? ? ? ? ?0

6? ? 2400614? ?November-2015? 2297544? ? ? ? ? ? ? ? ? ?0

7? ? 2400614? ?December-2015? 2297544? ? ? ? ? ? ? ? ? ?0

8? ? 2400614? ? January-2016? 2297544? ? ? ? ? ? ? ? ? ?1

9? ? 2400614? ?February-2016? 2297544? ? ? ? ? ? ? ? ? ?1

10? ?2400614? ? ? March-2016? 2297544? ? ? ? ? ? ? ? ? ?1

16? ?2400133? ?February-2016? 4597531? ? ? ? ? ? ? ? ? ?0

17? ?2400133? ? ? March-2016? 4597531? ? ? ? ? ? ? ? ? ?0

18? ?2400133? ? ? April-2016? 4597531? ? ? ? ? ? ? ? ? ?0

19? ?2400133? ? ? ? May-2016? 4597531? ? ? ? ? ? ? ? ? ?0

20? ?2400133? ? ? ?June-2016? 4597531? ? ? ? ? ? ? ? ? ?0

21? ?2400133? ? ? ?July-2016? 4597531? ? ? ? ? ? ? ? ? ?0

22? ?2400133? ? ?August-2016? 4597531? ? ? ? ? ? ? ? ? ?1

23? ?2400133? September-2016? 4597531? ? ? ? ? ? ? ? ? ?1

24? ?2400133? ? October-2016? 4597531? ? ? ? ? ? ? ? ? ?1

25? ?2400133? ?November-2016? 4597531? ? ? ? ? ? ? ? ? ?1

26? ?2400133? ?December-2016? 4597531? ? ? ? ? ? ? ? ? ?1

27? ?2400133? ? January-2017? 4597531? ? ? ? ? ? ? ? ? ?1

28? ?2400133? ?February-2017? 4597531? ? ? ? ? ? ? ? ? ?1

29? ?2400133? ? ? March-2017? 4597531? ? ? ? ? ? ? ? ? ?1

30? ?2400133? ? ? April-2017? 4597531? ? ? ? ? ? ? ? ? ?1

31? ?2400133? ? ? ? May-2017? 4597531? ? ? ? ? ? ? ? ? ?1

N = 6

mask = (df.assign(zeros=df['Chef_is_masterchef'].eq(0))

? ? ? ? ? .groupby('Hotel_id')[['Chef_is_masterchef', 'zeros']]

? ? ? ? ? .transform('sum')

? ? ? ? ? .ge(N)

? ? ? ? ? .all(axis=1))

df2 = df[mask]

print (df2)

? ? Hotel_id? ? ? Month_Year? Chef_Id? Chef_is_masterchef

16? ?2400133? ?February-2016? 4597531? ? ? ? ? ? ? ? ? ?0

17? ?2400133? ? ? March-2016? 4597531? ? ? ? ? ? ? ? ? ?0

18? ?2400133? ? ? April-2016? 4597531? ? ? ? ? ? ? ? ? ?0

19? ?2400133? ? ? ? May-2016? 4597531? ? ? ? ? ? ? ? ? ?0

20? ?2400133? ? ? ?June-2016? 4597531? ? ? ? ? ? ? ? ? ?0

21? ?2400133? ? ? ?July-2016? 4597531? ? ? ? ? ? ? ? ? ?0

22? ?2400133? ? ?August-2016? 4597531? ? ? ? ? ? ? ? ? ?1

23? ?2400133? September-2016? 4597531? ? ? ? ? ? ? ? ? ?1

24? ?2400133? ? October-2016? 4597531? ? ? ? ? ? ? ? ? ?1

25? ?2400133? ?November-2016? 4597531? ? ? ? ? ? ? ? ? ?1

26? ?2400133? ?December-2016? 4597531? ? ? ? ? ? ? ? ? ?1

27? ?2400133? ? January-2017? 4597531? ? ? ? ? ? ? ? ? ?1

28? ?2400133? ?February-2017? 4597531? ? ? ? ? ? ? ? ? ?1

29? ?2400133? ? ? March-2017? 4597531? ? ? ? ? ? ? ? ? ?1

30? ?2400133? ? ? April-2017? 4597531? ? ? ? ? ? ? ? ? ?1

31? ?2400133? ? ? ? May-2017? 4597531? ? ? ? ? ? ? ? ? ?1

如果可能的話,可以使用其他一些值,例如0和:1


N = 3

mask = (df.assign(zeros= df['Chef_is_masterchef'].eq(0),

? ? ? ? ? ? ? ? ? ones = df['Chef_is_masterchef'].eq(1))

? ? ? ? ? .groupby('Hotel_id')[['ones', 'zeros']]

? ? ? ? ? .transform('sum')

? ? ? ? ? .ge(N)

? ? ? ? ? .all(axis=1))


df1 = df[mask]


查看完整回答
反對 回復 2023-07-11
  • 1 回答
  • 0 關注
  • 153 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號