簡體   English   中英

每組的唯一值計數作為帶有熊貓的新列

[英]Count of unique values per group as new column with pandas

我想計算熊貓數據框中一組的唯一觀察值,並創建一個具有唯一計數的新列。 重要的是,我不想減少數據框中的行; 有效地執行類似於 SQL 中的窗口函數的操作。

df = pd.DataFrame({
         'uID': ['James', 'Henry', 'Abe', 'James', 'Henry', 'Brian', 'Claude', 'James'],
         'mID': ['A', 'B', 'A', 'B', 'A', 'A', 'A', 'C']
})

df.groupby('mID')['uID'].nunique()

將獲得每組的唯一計數,但它總結(減少行),我實際上想按照以下方式做一些事情:

df['ncount'] = df.groupby('mID')['uID'].transform('nunique')

(這顯然不起作用)

通過獲取獨特的匯總數據框並將其加入原始數據框,可以實現預期的結果,但我想知道是否有更簡單的解決方案。

謝謝

GroupBy.transform('nunique')

v0.23.4 ,您的解決方案對我有用。

df['ncount'] = df.groupby('mID')['uID'].transform('nunique')
df
      uID mID  ncount
0   James   A       5
1   Henry   B       2
2     Abe   A       5
3   James   B       2
4   Henry   A       5
5   Brian   A       5
6  Claude   A       5
7   James   C       1

GroupBy.nunique + pd.Series.map

此外,使用您現有的解決方案,您可以將系列mapmID

df['ncount'] = df.mID.map(df.groupby('mID')['uID'].nunique())
df
      uID mID  ncount
0   James   A       5
1   Henry   B       2
2     Abe   A       5
3   James   B       2
4   Henry   A       5
5   Brian   A       5
6  Claude   A       5
7   James   C       1

你很親近!

df['ncount'] = df.groupby('mID')['uID'].transform(pd.Series.nunique)

      uID mID  ncount
0   James   A       5
1   Henry   B       2
2     Abe   A       5
3   James   B       2
4   Henry   A       5
5   Brian   A       5
6  Claude   A       5
7   James   C       1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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