[英]Python pandas: group by two columns, sum on one but not on the others
我有一個 dataframe,df:
地點 | 類別 | 物種 | 數字 | X | 是 |
---|---|---|---|---|---|
一種 | 小羚羊 | 青霉 | 3個 | 9.1 | -2.1 |
一種 | 小羚羊 | C 美唇魚 | 6個 | 9.1 | -2.1 |
b | 小羚羊 | C 美唇魚 | 4個 | 9.2 | -2.2 |
b | 食肉動物 | Servalina | 2個 | 9.2 | -2.2 |
b | 食肉動物 | 斑點棉 | 3個 | 9.2 | -2.2 |
c | 食肉動物 | C 奧拉塔 | 1個 | 9.3 | -2.3 |
我想在這些條件下將 df 轉換為以下格式:
所以 df:
地點 | 類別 | 數字 | X | 是 |
---|---|---|---|---|
一種 | 小羚羊 | 9 | 9.1 | -2.1 |
b | 小羚羊 | 4個 | 9.2 | -2.2 |
b | 食肉動物 | 5個 | 9.2 | -2.2 |
c | 食肉動物 | 1個 | 9.3 | -2.3 |
我目前的方法是:
df1 = df[['Location', 'Category', 'Number']].copy()
df2 = df[['Location', 'x', 'y']].copy()
df1 = df1.groupby('Location', 'Category']).sum()
df3 = pd.merge(df1, df2, how = 'inner', on = ['Location'])
而不是第 3 步。 我得到一個 df3,其中類別列被刪除並且位置不再分組,如下所示:
地點 | 數字 | X | 是 |
---|---|---|---|
一種 | 9 | 9.1 | -2.1 |
一種 | 9 | 9.1 | -2.1 |
b | 4個 | 9.2 | -2.2 |
b | 4個 | 9.2 | -2.2 |
c | 1個 | 9.3 | -2.3 |
我有點懶,有點卡,有人能給我扔骨頭嗎? 並可能使我的編碼在此過程中更有效率。 先感謝您。
在agg
中指定列和函數:
sum
first
值>>> df.groupby(["Location","Category"],as_index=False).agg({"Number":"sum","x":"first","y":"first"})
Location Category Number x y
0 a Duiker 9 9.1 -2.1
1 b Carnivore 5 9.2 -2.2
2 b Duiker 4 9.2 -2.2
3 c Carnivore 1 9.3 -2.3
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.