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

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

查看 groupby 之后每個 ID 是否存在元素

查看 groupby 之后每個 ID 是否存在元素

郎朗坤 2023-01-04 10:28:02
這是我的數據框:       ID  Color 0       1   red    1       1   blue2       1   yellow3       2   blue4       2   purple5       3   yellow6       3   green我想創建第三列,告訴我每個 ID 是紅色還是黃色。如果有紅色則第三列將為 1,如果有紫色則第三列將為 0,如果兩者都沒有則留空。不會有紅色和紫色在同一個 ID 中的情況。所以,我的結果 df 應該是這樣的:       ID  Color    col30       1   red     11       1   blue    12       1   yellow  13       2   blue    04       2   purple  05       3   yellow  6       3   green我正在考慮對我的 ID 列進行分組,然后檢查顏色列中是否存在紅色或紫色。我不確定如何實施。請幫忙
查看完整描述

2 回答

?
MMMHUHU

TA貢獻1834條經驗 獲得超8個贊

這是使用的一種方法np.select

conds = [df.Color.eq('red'), df.Color.eq('purple')]

df['col3'] = np.select(conds, [1,0], '')

df['col3'] = df.groupby('ID').col3.transform('max')

或者我們可以改為將 a 設置nan為默認值,并使用 進行轉換first:


df['col3'] = np.select(conds, [1,0], np.nan)

df['col3'] = df.groupby('ID').col3.transform('first').fillna('')

print(df)


   ID   Color col3

0   1     red    1

1   1    blue    1

2   1  yellow    1

3   2    blue    0

4   2  purple    0

5   3  yellow     

6   3   green     

請注意,前一種方法利用了以下優勢:


max('', '0')

# '0'

max('', '1')

# '1'


查看完整回答
反對 回復 2023-01-04
?
慕姐4208626

TA貢獻1852條經驗 獲得超7個贊

numpy如果您出于任何原因不想使用,這里有一個替代方案:


df['col3'] = df.set_index('ID')['Color'].apply({'red': 1, 'purple': 0}.get).groupby(level=0).transform('max').fillna('').reset_index(drop=True)


   ID   Color col3

0   1     red    1

1   1    blue    1

2   1  yellow    1

3   2    blue    0

4   2  purple    0

5   3  yellow     

6   3   green     


查看完整回答
反對 回復 2023-01-04
  • 2 回答
  • 0 關注
  • 109 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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