【发布时间】:2020-01-01 01:13:51
【问题描述】:
我想对数据框中的特定列进行分组并计算由此创建的子组的总和,同时保留(显示)每个子组中的所有记录。
我正在尝试创建自己的信用卡费用跟踪程序。 (我知道已经有几个可用的了,但我们的想法是学习 Python。)
我有'Merchant'、'Date'、'Type'和'Amount'这些常用字段
我想做以下其中一项:
按商家分组项目,然后在每个这样的组中,将金额拆分为(两个新列)“借方”和“贷方”。我还希望能够对这些列下的金额求和。对每个商家组重复此操作。
如果无法根据交易的“类型”(即“借方”和“贷方”)进行拆分,那么我希望能够分别对借方和贷方进行求和,并且保留行项目(即显示时)。在“金额”列上执行 sum() 只会为每个商家提供一个数字,我验证它是一个不正确的金额。
我的数据框如下所示:
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
理想情况下,我想要以下内容: the line items are displayed and a total for a given subgroup. In this case for merchant 'AT' and ideally sorted by date.
Date Merchant Credit Debit
305 4/27/2019 AT 0 -12.4
217 5/23/2019 AT 0 -41.7
162 6/21/2019 AT 139.19 0
127 7/8/2019 AT 69.25 0
208.44 -54.1
看起来很简单,但我无法以这种方式对其进行格式化。
编辑:
我收到 rename_axis() 错误:
rename_axis() got an unexpected keyword argument 'index'
如果我删除索引参数,'columns' 也会出现同样的错误
我搜索了很多用法(如 Benoit 所示),但找不到。他们都使用字符串或列表。我尝试使用:
rename_axis(None,None)
我得到了错误:
ValueError: No axis named None for object type <class 'pandas.core.frame.DataFrame'>
我不知道这是不是因为我使用的 python 版本(3.6.6)。我在 Spyder 和 Jupyter 上都试过了。但我得到同样的错误。
我用过:
rename_axis(None, axis=1) 我似乎得到了想要的结果(有点)
但我无法理解这是如何解释的,因为没有指定限定符来说明它正在读取哪个参数以表示“无”。谁能解释一下?
感谢任何帮助! 非常感谢!
【问题讨论】:
-
那么,你的问题是什么?
-
对于您问题中包含的示例数据,您想要的输出究竟是什么?
标签: python python-3.x pandas pandas-groupby