[英]In a pandas dataframe, count the number of times a condition occurs in one column?
[英]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.