我有一個資料框:
df1 = pd.DataFrame({'id': ['1','2','2','3','3','4','4'],
'name': ['James','Jim','jimy','Daniel','Dane','Ash','Ash'],
'event': ['Basket','Soccer','Soccer','Basket','Soccer','Basket','Soccer']})
我想計算 id 的唯一值,但使用名稱,除此之外的結果是:
id name count
1 James 1
2 Jim, jimy 2
3 Daniel, Dane 2
4 Ash 2
我嘗試按 id 和 name 分組,但它不符合我的預期
uj5u.com熱心網友回復:
你可以試試:
df1.groupby('id').agg(
name=('name', lambda x: ', '.join(x.unique())),
count=('name', 'count')
)
我們基本上是分組id,然后將唯一加入names逗號分隔的串列!
uj5u.com熱心網友回復:
這是一個解決方案:
groups = df1[["id", "name"]].groupby("id")
a = groups.agg(lambda x: ", ".join( set(x) ))
b = groups.size().rename("count")
c = pd.concat([a,b], axis=1)
談到 pandas,我不是專家,但我想我不妨發布我的解決方案,因為我認為它簡單易讀。
在您的示例中, groupby 是在id列上完成的,而不是 byid和name。name您在預期的 DataFrame 中看到的列是 groupby 之后完成的聚合的結果。在這里,很明顯 groupby 是在id列上完成的。
我的解決方案可能不是最直接的,但我仍然覺得它更具可讀性:
groups通過 group by創建 groupby 物件ida通過使用逗號聚合它來創建一個 DataFramegroups(您還需要使用洗掉重復項set(...)):lambda x: ", ".join( set(x) )
因此,DataFramea將具有以下資料:
name
id
1 James
2 Jim, jimy
3 Daniel, Dane
4 Ash
b通過計算每個組的大小來創建另一個 DataFramegroups:(groups.size()您還應該重命名您的列)
id
1 1
2 2
3 2
4 2
Name: count, dtype: int64
- 連接
a和b水平,你得到你想要的
name count
id
1 James 1
2 Jim, jimy 2
3 Daniel, Dane 2
4 Ash 2
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/525438.html
標籤:Python熊猫数据框
