我正在使用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 . . .
Run Code Online (Sandbox Code Playgroud)
我想创建一个名为"Total"的新专栏,其中包含每个人的总金额.(由fullname和zip标识).我很难找到正确的解决方案.
我们只需调用我的csv import csvfile.这就是我所拥有的.
import Pandas
df = pandas.read_csv('csvfile.csv', header = 0)
df.sort(['fullname'])
Run Code Online (Sandbox Code Playgroud)
我想我必须使用iterrows来做我想要的对象.丢弃重复的问题是我将丢失金额或金额可能不同.
EdC*_*ica 26
我想你想要这个:
df['Total'] = df.groupby(['Fullname', 'Zip'])['Amount'].transform('sum')
Run Code Online (Sandbox Code Playgroud)
因此,groupby将由本集团Fullname及zip列,如你所说,我们再打电话transform就Amount列,并通过将字符串中计算出总量sum,这将返回对齐到原来的指数系列df,你就可以删除重复项然后.例如
new_df = df.drop_duplicates(subset=['Fullname', 'Zip'])
Run Code Online (Sandbox Code Playgroud)
Ynj*_*jmh 11
考虑使用以下之一
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')
Run Code Online (Sandbox Code Playgroud)
所有三种方法都将结果存储在Amount列中。由于列的含义发生了变化,您可以将列重命名为另一个df.rename()
df = df.rename(columns={'Amount':'Total'})
Run Code Online (Sandbox Code Playgroud)
如果您想保留其他列中的一个值,您可以使用agg(),它接受轴标签 -> 函数的字典,指定应为每一列执行什么操作。
df.groupby(['Fullname', 'Zip'], as_index=False).agg({'Amount': 'sum', 'State': 'first'})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12484 次 |
| 最近记录: |