這個問題在這里已經有了答案: Groupby 值對資料框熊貓的計數 (5 個回答) 11 小時前關閉。
我有一個結構如下的 DataFrame:
df = pd.DataFrame({
'id': ['123', '123', '123', '456', '456', '789'],
'type': ['A', 'A', 'B', 'B', 'C', 'A']
})
| ID | 型別 |
|---|---|
| 123 | 一個 |
| 123 | 一個 |
| 123 | 乙 |
| 456 | 乙 |
| 456 | C |
| 789 | 一個 |
如何獲取按id分組的每種型別的計數,并為每種唯一型別創建一個新列?
我正在尋找的結果 DataFrame 如下所示:
df = pd.DataFrame({
'id': ['123', '456', '789'],
'A': [2, 0, 1],
'B': [1, 1, 0],
'C': [0, 1, 0]
})
| ID | 一個 | 乙 | C |
|---|---|---|---|
| 123 | 2 | 1 | 0 |
| 456 | 0 | 1 | 1 |
| 789 | 1 | 0 | 0 |
感謝您的任何幫助和指導。
uj5u.com熱心網友回復:
你可以做:
out = df.groupby(['id','type']).size().unstack().fillna(0).astype(int).rename_axis([None])
或者像@Quang Hoang 建議的那樣,就像
out = pd.crosstab(df['id'], df['type']).rename_axis([None])
輸出:
type A B C
123 2 1 0
456 0 1 1
789 1 0 0
uj5u.com熱心網友回復:
您可以使用 pd.apply 為每一列使用函式。例如,如果您想計算“c”列的值,您可以這樣做:
New_column = df["C"].apply(count)
New_column 是一系列列“c”計數。
uj5u.com熱心網友回復:
另一種聚合方式:
df.groupby(['id', 'type']).agg(count=('type', len)).reset_index().pivot(index='id', columns='type', values='count').fillna(0)
type A B C
id
123 2.0 1.0 0.0
456 0.0 1.0 1.0
789 1.0 0.0 0.0
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/383046.html
標籤:Python 熊猫 数据框 pandas-groupby
上一篇:有沒有一種方法可以根據出現的順序計數在Pandas中聚合時間序列?
下一篇:使用最小和最大日期計算值差異
