簡體   English   中英

Python pandas:按兩列分組,對一列求和但不對其他列求和

[英]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 轉換為以下格式:

  1. 刪除物種列
  2. 按類別和位置分組
  3. 在分組中,聚合數值
  4. 但不要聚合列 x 和 y(對於任何位置都相同)

所以 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

我目前的方法是:

  1. 將 df 拆分為 df1 和 df2,其中
df1 = df[['Location', 'Category', 'Number']].copy()
df2 = df[['Location', 'x', 'y']].copy()
  1. 按位置和類別對 df1 進行分組和求和
df1 = df1.groupby('Location', 'Category']).sum()
  1. 在位置和類別上合並 df1 和 df2 相交
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
  • 保留列“x”和“y”中的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.

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