python - 如何根据 Pandas DataFrame 中其他列的值仅对列的某些元素求和?

标签 python python-3.x pandas dictionary

假设我们有一个如下所示的 Pandas DataFrame:

df=pd.DataFrame({'name':['Ind','Chn','SG','US','SG','US','Ind','Chn', 'Fra','Fra'],'a':[5,6,3,4,7,12,66,78,65,100]})

我想对“name”列的每个不同值求“a”列的值之和。

我尝试了这段代码:

for i in df['name'].unique(): df['tot']=df[(df.name==i)]['a'].sum()

在生成的新列中,“tot”列仅包含所有行的“name”的最后一个不同值的总和,即(仅“Fra”),而不是每个 [Ind、US、Fra 等的单独值]。我希望在新列 (tot) 中为“名称”列的每个唯一值添加一个单元格,并最终希望通过每个唯一值的总和对整个日期框“df”进行排序。

我尝试使用字典,

dc={}
for i in df['name'].unique():
   dc[i]=dc.get(i,0)+(df[(df.name==i)]['a'].sum())

我在字典中得到了想要的结果,所以我不知道如何根据字典“dc”的值从这里对 df 进行排序。

{'Ind': 71, 'Chn': 84, 'SG': 10, 'US': 16, 'Fra': 165}

有人可以解释一下以尽可能多的方式解决这种情况的过程吗?处理海量数据时哪种方法最有效?谢谢!

编辑:我的预期输出只是按新列“tot”的值对数据帧 df 进行排序。或者就像查找与“tot”列中的最大值或最小值关联的行。

最佳答案

您正在寻找groupby

df=pd.DataFrame({'name':['Ind','Chn','SG','US','SG','US','Ind','Chn','Fra','Fra'],'a':[5,6,3,4,7,12,66,78,65,100]})
df.groupby('name').a.sum()

Out[950]: 
name
Chn     84
Fra    165
Ind     71
SG      10
US      16
Name: a, dtype: int64

编辑:

df.assign(total=df.name.map(df.groupby('name').a.sum())).sort_values(['name','total'])


Out[964]: 
     a name  total
1    6  Chn     84
7   78  Chn     84
8   65  Fra    165
9  100  Fra    165
0    5  Ind     71
6   66  Ind     71
2    3   SG     10
4    7   SG     10
3    4   US     16

编辑2:

df.groupby('name').a.sum().sort_values(ascending=True)
Out[1111]: 
name
SG      10
US      16
Ind     71
Chn     84
Fra    165
Name: a, dtype: int64
df.groupby('name').a.sum().sort_values(ascending=False)
Out[1112]: 
name
Fra    165
Chn     84
Ind     71
US      16
SG      10
Name: a, dtype: int64

(df.groupby('name').a.sum().sort_values(ascending=False)).index.values
Out[1119]: array(['Fra', 'Chn', 'Ind', 'US', 'SG'], dtype=object)

关于python - 如何根据 Pandas DataFrame 中其他列的值仅对列的某些元素求和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46408868/

相关文章:

python - Pandas 子集根据另一个数据中的值从数据框中随机选择行数

python - 如何将 DataFrame 的行更改为 pandas 中的列?

python - 如何提高Python脚本的内存效率

python - 只有四个元素在 python 中出现内存错误

python - 用装饰函数填充字典

Python - 将多个相同维度的二维数组合并为一个二维数组

python - "import pandas.io.data as web "给我一个错误,说没有 pandas.io.data 的模块名称

python - mrjob:无效的引导操作路径,必须是 Amazon S3 中的一个位置

python - 从字典中提取键值作为数据框

python-3.x - 在 python 中过滤月份和日期,而不考虑年份