提问人:user603535 提问时间:11/14/2023 最后编辑:Goku - stands with Palestineuser603535 更新时间:11/15/2023 访问量:73
跨多列的 Grouby 和 Sum [复制]
Grouby and Sum Across Multiple Columns [duplicate]
问:
如何在 DataFrame 中的多个列之间进行分组和求和,同时保留 DataFrame 的原始“外观”?这就是我的意思:
代码/数据:
import pandas as pd
df = pd.DataFrame({"State": ["NM", "NM", "NM", "TX", "TX", "TX", "TX", "TX"],
"County": ["Lea", "Lea", "Chaves", "Lamb", "Lamb", "Lubbock", "Lubbock", "Denton"],
"Name": ["Mike", "Mike", "Cash", "Mary", "Mary", "Addison", "Addison", "Jen"],
"Checking": [50, 100, 25, 1000, 360, 9, 100, 200],
"Savings": [100, 200, 75, 300, 300, 10000, 250, 75]})
print(df)
State County Name Checking Savings
0 NM Lea Mike 50 100
1 NM Lea Mike 100 200
2 NM Chaves Cash 25 75
3 TX Lamb Mary 1000 300
4 TX Lamb Mary 360 300
5 TX Lubbock Addison 9 10000
6 TX Lubbock Addison 100 250
7 TX Denton Jen 200 75
这是我想要的输出。我省略了索引,因为我对它最终的显示方式无动于衷,只要我得到下面的结果。请注意,对于每个州、县和名称组合,我如何分别对“支票”和“储蓄”列求和。例如,NM -> Lea -> Mike 只有一行,其中 Checking 和 Savings 列具有与上述条件匹配的所有行的总和。
State County Name Checking Savings
NM Lea Mike 150 300
NM Chaves Cash 25 75
TX Lamb Mary 1360 600
TX Lubbock Addison 109 10250
TX Denton Jen 200 75
第一个挑战是按前三列分组,然后分别对最后两列求和。第二个挑战是让数组与这种格式相匹配,没有嵌套/多层索引或列。
谢谢!
答:
0赞
Goku - stands with Palestine
11/14/2023
#1
import pandas as pd
df = pd.DataFrame({"State": ["NM", "NM", "NM", "TX", "TX", "TX", "TX", "TX"],
"County": ["Lea", "Lea", "Chaves", "Lamb", "Lamb", "Lubbock", "Lubbock", "Denton"],
"Name": ["Mike", "Mike", "Cash", "Mary", "Mary", "Addison", "Addison", "Jen"],
"Checking": [50, 100, 25, 1000, 360, 9, 100, 200],
"Savings": [100, 200, 75, 300, 300, 10000, 250, 75]})
print(df)
State County Name Checking Savings
0 NM Lea Mike 50 100
1 NM Lea Mike 100 200
2 NM Chaves Cash 25 75
3 TX Lamb Mary 1000 300
4 TX Lamb Mary 360 300
5 TX Lubbock Addison 9 10000
6 TX Lubbock Addison 100 250
7 TX Denton Jen 200 75
您可以执行以下操作:
df.groupby(['State','County','Name']).agg(
Checking = ('Checking','sum'),
Savings = ('Savings','sum'),
).reset_index()
#output
评论
0赞
user603535
11/15/2023
感谢您的帮助!我不明白两个等号之前的“检查”和“储蓄”文本。它们在 agg 函数中做了什么,为什么它们不需要是字符串?例如,Checking = ('Checking','sum') 在做什么?
0赞
Goku - stands with Palestine
11/15/2023
实际上,它们是新的列名。您可以拥有任何列名。我保持不变
0赞
Goku - stands with Palestine
11/15/2023
@user603535请这个答案 stackoverflow.com/a/53619715/13086128
0赞
user603535
11/15/2023
你的第一个建议对我不起作用(也许是由于我的 Python 版本?),所以这就是为什么我有点困惑。果然,我四处搜索,偶然发现了您刚才建议的相同链接。非常感谢!
0赞
Goku - stands with Palestine
11/15/2023
如果你觉得答案有用,你可以+1✔️,这样其他堆栈成员就知道他是否发现和你一样的疑问。
上一个:熊猫抱怨密钥错误,即使密钥存在
下一个:计算每个组的唯一值和小计
评论