csv Pandas重复属性之和

x6492ojm  于 2023-04-27  发布在  其他
关注(0)|答案(2)|浏览(115)

我正在使用Pandas操作一个包含多行和多列的csv文件,如下所示

Fullname     Amount     Date           Zip    State .....
John Joe        1        1/10/1900     55555    Confusion
Betty White     5         .             .       Alaska 
Bruce Wayne     10        .             .       Frustration
John Joe        20        .             .       .
Betty White     25        .             .       .

我想创建一个名为Total的新列,其中包含每个人的总金额。(由FullnameZip标识)。我很难找到正确的解决方案。
让我们把我的csv import命名为csvfile。

import Pandas
df = pandas.read_csv('csvfile.csv', header = 0) 
df.sort(['fullname'])

我想我必须使用iterrows来做我想作为一个对象做的事情。删除重复项的问题是我会丢失数量或者数量可能不同。

zf2sa74q

zf2sa74q1#

我想你想要这个:

df['Total'] = df.groupby(['Fullname', 'Zip'])['Amount'].transform('sum')

所以groupby将按Fullnamezip列分组,正如你所说的,然后我们在Amount列上调用transform,并通过传入字符串sum来计算总量,这将返回一个索引与原始df对齐的序列,然后你可以删除重复的序列。

new_df = df.drop_duplicates(subset=['Fullname', 'Zip'])
yizd12fk

yizd12fk2#

请考虑使用以下方法之一

df = df.groupby(['Fullname', 'Zip'], as_index=False)['Amount'].sum()
df = df.groupby(['Fullname', 'Zip'], as_index=False)['Amount'].cumsum()
df = df.groupby(['Fullname', 'Zip'], as_index=False)['Amount'].agg('sum')

这三个方法都将结果存储在Amount列中。

df = df.rename(columns={'Amount':'Total'})

如果你想从其他列中保留一个值,你可以使用agg(),它接受轴标签的dict-〉函数,指定应该对每一列执行什么操作。

df.groupby(['Fullname', 'Zip'], as_index=False).agg({'Amount': 'sum', 'State': 'first'})

相关问题