簡體   English   中英

使用 for 循環和 groupby 對 Python DataFrame 中的許多列按 ID 求和

[英]Sum by ID for many columns in a Python DataFrame using for loop and groupby

我有一個數據框

名稱……值……標記……點數

瓦斯.......... 234 ..... 10 ....... 16

拉胡.. .. 324 .. . . . . . . . . . . . . . . . . . . . . . . . . . .

瓦斯 ........ 200 ...... 10 ...... 12

斯里蘭卡 ..... 66 .... 10 .... 52

天真..... 76 ..... 10 ..... 43

抹布………… 50…………10…………12

raghu .... 50 .... 10 .... 23

普拉圖 ... 100 ...... 10 ...... 21

斯里蘭卡 ...... 100 ...... 10 ...... 54

斯里蘭卡 ...... 25 ...... 10 ...... 34

斯里蘭卡 ...... 25 ...... 10 ...... 23

普拉圖 ... 25 ... ... 10 ... 43

血管...... 125 .... 10 .... 23

天真...... 50 .... 10 .... 53

這里的名稱列是 ID,基於每個名稱,我需要使用 groupby 和 for 循環總結所有相應的列。 我嘗試使用 groupby 對一列進行操作,但是當我嘗試對多列進行操作時,我失敗了。 以下步驟有助於對一列求和:

df[New_VALUE] = df.groupby(["name"])["value"].transform(sum)

但是當嘗試所有列時,它會拋出不同的錯誤。 我是 Python 的新手。

我認為循環不是必需的,只使用join + transform + add_prefix

df = df.join(df.groupby("name").transform(sum).add_prefix('sum_'))
print (df)
      name  value  marks  points  sum_value  sum_marks  sum_points
0      vas    234     10      16        434         20          28
1    raghu    324     10      12        424         30          47
2      vas    200     10      12        434         20          28
3      sri     66     10      52        216         40         163
4   naveen     76     10      43        126         20          96
5    raghu     50     10      12        424         30          47
6    raghu     50     10      23        424         30          47
7   prathu    100     10      21        125         20          64
8      sri    100     10      54        216         40         163
9      sri     25     10      34        216         40         163
10     sri     25     10      23        216         40         163
11  prathu     25     10      43        125         20          64
12    vasu    125     10      23        125         10          23
13  naveen     50     10      53        126         20          96

但如果需要它進行其他處理:

for c in df.columns[1:]:
    df['sum_{}'.format(c)] = df.groupby("name")[c].transform(sum)

您還可以使用agg對所有列的所有行求和

df = df.groupby('name').agg(sum)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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