簡體   English   中英

計數級別在 Python dataframe 中的集群/組內出現的次數

[英]Count number of times a level occurs within a cluster/group in Python dataframe

我有一個帶集群的 dataframe。 在這個 dataframe 中,我想計算特定值在集群內出現的次數。 例如:

data = {'cluster':['1001', '1001', '1001', '1002', '1002', '1002'],
        'attribute':['1', '2', '1', '1', '2', '2']}

df = pd.DataFrame(data)

df

我想計算每個集群內出現了多少次“1”。 我曾嘗試使用 lambda 函數,雖然嘗試在集群內進行平均,但計數不起作用。

對於平均,我使用:

df['newcol'] = df.groupby('cluster')['attribute'].transform(lambda x: x.mean())
df

使用相同,但均值替換為計數:

df['newcol'] = df.groupby('cluster')['attribute'].transform(lambda x: x.count('2'))
df

給我這個錯誤:

錯誤:“請求的級別 (3) 與索引名稱 (None) 不匹配”

理想情況下,我想將計數添加為附加列,因此我使用 lambda function。

請幫我解決這個問題,如果需要任何額外的細節或者我不清楚,我很樂意添加信息!

編輯

謝謝,@Rutger 提供了我想要的東西。 簡而言之,我希望創建一個新列,以顯示該屬性在集群中出現了多少次。 我還需要它是可概括的,以便可以計算所有屬性。

另外,我的 dataframe 包含大約 600,000 行。 有沒有推薦的方法可以從這個數據集中取出一個塊,以便我可以做我的工作? 如果其他地方有類似的答案,請指出我的相同! 謝謝!

有很多方法可以做到這一點。 我將 go 用於包含兩列的 groupby ,然后您就會看到它們發生的頻率。 這不是我假設的最直接的方法,但我認為這是您正在尋找的結果。

df['count'] = df.set_index(['cluster', 'attribute']).index.map(df.groupby(['cluster', 'attribute']).size())

由於您想在現有列旁邊添加一列以顯示集群(組)中1's數量,因此您可以像現在一樣繼續使用.transform()

.transform()內部,您可以使用 lambda function 來檢查元素是否等於 '1' 並獲取此類True條目的sum() (而不是 count),如下所示:

df['newcol'] = df.groupby('cluster')['attribute'].transform(lambda x: x.eq('1').sum())

結果:

print(df)


  cluster attribute   newcol
0    1001         1        2
1    1001         2        2
2    1001         1        2
3    1002         1        1
4    1002         2        1
5    1002         2        1

暫無
暫無

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

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