[英]pandas transform nunique on groupby object dealing with nan values
[英]pandas groupby(col).nunique() return NaN
在具有 2 列chain_id
和chain_event_id
的 df 中,我試圖創建第三個計算每個chain_id
組中chain_event_id
唯一值。 例如,如果chain_id
編號 511 有三行, chain_event_id
值為1,2,1
我希望新列包含值 2。
考慮這個樣本數據集:
d = {'chain_id': [511,511,511,666],'chain_event_id':[1,2,1,1]}
df = pd.DataFrame(data=d)
我嘗試使用
df['events_in_chain'] = df.groupby('chain_id').chain_event_id.nunique()
以及.apply(lambda x: len(x.unique()))
和.agg('nunique')
但結果是一樣的:每個組都得到所有的 NaN 值。
這段代碼的打印輸出:
import pandas as pd
d = {'chain_id': [511,511,511,666],'chain_event_id':[1,2,1,1]}
df = pd.DataFrame(data=d)
print(df)
print(df[df['chain_id'] == 511][['chain_id', 'chain_event_id']])
print(df[df['chain_id'] == 511]['chain_event_id'].unique())
print(df[df['chain_id'] == 511]['chain_event_id'].nunique())
df['events_in_chain'] = df.groupby('chain_id').chain_event_id.nunique()
print(df[df['chain_id'] == 511]['events_in_chain'])
這是:
chain_id chain_event_id
0 511 1
1 511 2
2 511 1
3 666 1
chain_id chain_event_id
0 511 1
1 511 2
2 511 1
[1 2]
2
0 NaN
1 NaN
2 NaN
Name: events_in_chain, dtype: float64
我在這里失去理智......為什么events_in_chain
不斷得到 NaN 而不是 2 :-( 我到底錯過了什么?
謝謝
IIUC,您想使用每個組的 nunique 創建一個新列,因此您需要使用transform('nunique')
:
df['events_in_chain'] = df.groupby('chain_id')['chain_event_id'].transform('nunique')
輸出:
chain_id chain_event_id events_in_chain
0 511 1 2
1 511 2 2
2 511 1 2
3 666 1 1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.