Python 计算总和-使用groupby对行进行分组后
我想在保留(显示)每个子组中的所有记录的同时,按数据帧中的特定列分组,并计算由此创建的子组的总和 我正在尝试创建自己的信用卡费用跟踪计划。(我知道已经有几个可用的,但想法是学习Python。) 我有“商户”、“日期”、“类型”和“金额”等常用字段 我想做以下工作之一:Python 计算总和-使用groupby对行进行分组后,python,python-3.x,pandas,pandas-groupby,Python,Python 3.x,Pandas,Pandas Groupby,我想在保留(显示)每个子组中的所有记录的同时,按数据帧中的特定列分组,并计算由此创建的子组的总和 我正在尝试创建自己的信用卡费用跟踪计划。(我知道已经有几个可用的,但想法是学习Python。) 我有“商户”、“日期”、“类型”和“金额”等常用字段 我想做以下工作之一: 按商户对项目进行分组,然后在每个此类分组中,将金额拆分为(两个新栏)“借方”和“贷方”。我还希望能够将这些列下的金额相加。对每个商户组重复此操作 如果无法根据交易的“类型”(即“借方”和“贷方”)进行拆分,则我希望能够分别对借方和
Posted_Date Amount Type Merchant
0 04/20/2019 -89.70 Debit UNI
1 04/20/2019 -6.29 Debit BOOKM
2 04/20/2019 -36.42 Debit BROOKLYN
3 04/18/2019 -20.95 Debit MTA*METROCARD
4 04/15/2019 -29.90 Debit ZARA
5 04/15/2019 -7.70 Debit STILES
在读入数据框并将交易标记为贷方或借方后,我拥有的代码是:
merch_new = df_new.groupby(['Merchant','Type'])
merch_new.groups
for key, values in merch_new.groups.items():
df_new['Amount'].sum()
print(df_new.loc[values], "\n\n")
我可以按以下方式进行拆分:
Posted_Date Amount Type Merchant
217 05/23/2019 -41.70 Debit AT
305 04/27/2019 -12.40 Debit AT
Posted_Date Amount Type Merchant
127 07/08/2019 69.25 Credit AT
162 06/21/2019 139.19 Credit AT
理想情况下,我希望如下所示:
它看起来很简单,但我无法以这种方式格式化它
编辑:
重命名轴()时出现错误:
rename\u axis()得到一个意外的关键字参数“index”
如果我删除index参数,我会得到与“columns”相同的错误
我搜索了很多用法(如Benoit所示),但找不到任何用法。它们都使用字符串或列表。我尝试使用:
rename\u轴(无,无)
我得到了一个错误:
ValueError:没有为对象类型命名为None的轴
我不知道这是否是因为我使用的python版本(3.6.6)。我试过Spyder和Jupyter。但我也犯了同样的错误
我用过:
rename\u axis(无,axis=1)
我似乎得到了想要的结果(某种程度上)
但我无法理解这是如何解释的,因为没有为“无”指定它读入哪个参数的限定符。谁能解释一下吗
感谢您的帮助!
非常感谢 我认为你试图实现这样的目标:
Posted_Date Amount Type Merchant
0 04/20/2019 -89.70 Debit UNI
1 04/20/2019 -6.29 Debit BOOKM
2 04/20/2019 -36.42 Debit BROOKLYN
3 04/18/2019 -20.95 Debit MTA*METROCARD
4 04/15/2019 -29.90 Debit ZARA
5 04/15/2019 -7.70 Debit STILES
[1]中的
##创建示例
作为pd进口熊猫
cols=[“过账日期”、“金额”、“类型”、“商户”]
数据=['04/20/2019',-89.70,'Debit','UNI'],
[2019年4月20日,-6.29,'Credit','BOOKM'],
['2019年4月20日',-36.42,'借方','布鲁克林',
[2019年4月20日,-6.29,'Credit','BOOKM'],
[2019年4月20日,-54.52,'Credit','BROOKLYN'],
[2019年4月18日,-20.95,'Credit','BROOKLYN']
df=pd.DataFrame(列=cols,数据=data)
##聚合函数为“sum”的透视表
df_final=pd.pivot_表(df,values='Amount',index=['Posted_Date','Merchant'],
columns=['Type'],aggfunc='sum')。fillna(0)。重置_index()。重命名_轴(index=None,columns=None)
df_final['Total']=df_final['Debit']+df_final['Credit']
出[1]:
过账日期商户贷记借方合计
2019年4月18日布鲁克林-20.95 0.00-20.95
2019年04月20日BOOKM-12.58 0.00-12.58
2019年04月20日布鲁克林-54.52-36.42-90.94
2019年04月20日UNI 0.00-89.70-89.70
那么,您的问题是什么?对于您在问题中包含的样本数据,您希望的输出是什么?谢谢您,Benoit。我也可以用你的解决方案。我只是编辑了这个问题来澄清。有没有办法得到这样的结果?还有,对于Benoit的解决方案,如果我想添加另一个标题为“总计”的列,这将是借方和贷方列的总和,我该怎么做?我刚刚编辑了我的答案,你是在找这样的列吗?谢谢你,Benoit;我看到你清理了它的显示方式,并将发布日期添加到结果中。我尝试了同样的方法,但是我得到了一个“Posted_Date”的关键错误。我尝试将其添加到df_final(您在使用透视表功能之前创建的)中:df_final=df_new['posteddate','Merchant','Type','Amount']].groupby(by=['Merchant','Type']).sum().reset_index()
,但我仍然收到相同的错误。。。有什么建议吗?这个错误意味着您的数据框中没有名为posted\u Date
的列。不只是叫日期吗?只需使用数据帧的实际列编辑此代码