簡體   English   中英

熊貓 groupby(col).nunique() 返回 NaN

[英]pandas groupby(col).nunique() return NaN

在具有 2 列chain_idchain_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM