首页 > 解决方案 > 尝试在python中创建一个汇总多个条件的新列

问题描述

          Date AccountRef      Amount       Type
0   2019-04-15   REF0005  25000.00   cashflow_in
1   2019-04-15   REF004  20000.00   cashflow_in
2   2019-06-07   REF005   2000.00   cashflow_in
3   2019-07-24   REF005   3000.00   cashflow_in
4   2019-07-25   REF004   5000.00   cashflow_out
5   2019-08-08   REF004   5000.00   cashflow_in
6   2019-09-10   REF004   5000.00   cashflow_out
7   2019-10-13   REF005   5000.00   cashflow_out
8   2019-10-30   REF006   5000.00   cashflow_in
9   2019-11-08   REF009   2500.00   cashflow_out
10  2019-11-23   REF005   5000.00   cashflow_in
11  2019-11-30   REF011   5000.00   cashflow_out

上面大致是我的数据集,我一直在尝试创建一个新列,如果“AccountRef”相同(所以是的,会有重复值),如果 type = cashflow_in,并且日期在之后一个日期(例如,使用 Date = 25/07/2020)。

在此之后我也将成为另一列,但计算方法应该相似,所以我应该能够再次替换过滤器/功能。

我试过像

> df = df[df['Type'] == 'cashflow_in'] 
> df['CumluativeIn'] = df.apply(lambda row: df[df['AccountRef'] == row['AccountRef']]['Amount'].sum(), axis=1)

但它并没有真正按应有的方式工作。它基于 excel 中的 SumIF 命令。

按照我的建议进行编辑。我的期望输出是满足这些条件的每一行中的值(或更准确地说是“总和”)(在某个日期之前,当所有值与同一行中的值相同时的总和,以及何时键入 - cashflow_in)。

第二个奇怪的标准,但之后我将添加第二列并更改日期,对不起我的问题!

编辑 2:显示我想要的示例 日期在 2019-11-01 之前

          Date AccountRef      Amount       Type Cumulative_In
0   2019-04-15   REF0005  25000.00   cashflow_in 30000.00
1   2019-04-15   REF004  20000.00   cashflow_in 25000.00
2   2019-06-07   REF005   2000.00   cashflow_in 30000.00
3   2019-07-24   REF005   3000.00   cashflow_in 30000.00
4   2019-07-25   REF004   5000.00   cashflow_out 25000.00
5   2019-08-08   REF004   5000.00   cashflow_in 25000.00
6   2019-09-10   REF004   5000.00   cashflow_out 25000.00
7   2019-10-13   REF005   5000.00   cashflow_out 30000.00
8   2019-10-30   REF006   5000.00   cashflow_in 5000.00
9   2019-11-08   REF009   2500.00   cashflow_out 0.00
10  2019-11-23   REF005   5000.00   cashflow_in 30000.00
11  2019-11-30   REF011   5000.00   cashflow_out 0.00

在 Excel 世界中(假设 0 = A2 和 F2 是新列中的第一个数据点),这将是 New Column = Sumifs{Amount Column,

或更准确地说

F2 = Sumifs{$D$2:$D$12,$C$2:$C$12,C2,$B$2:$B$12,< "2019-11-01",$F$2:$F$12 = "cashflow_in" }

然后 F3 变为 F3 = Sumifs{$D$2:$D$12,$C$2:$C$12,C3,$B$2:$B$12,< "2019-11-01",$F$2:$F$12 = "cashflow_in"} F4 = Sumifs{$D$2:$D$12,$C$2:$C$12,C4,$B$2:$B$12,< "2019-11-01",$F$2:$F$12 =“现金流入”}

标签: pythonpandas

解决方案


我可能不明白你的问题的意图。如果要按帐户计算总数,可以使用以下代码实现。这符合你的意图吗?

df['CumluativeIn'] = df.groupby('AccountRef')['Amount'].cumsum()

df
Date    AccountRef  Amount  Type    CumluativeIn
0   2019-04-15  REF0005 25000.0 cashflow_in 25000.0
1   2019-04-15  REF004  20000.0 cashflow_in 20000.0
2   2019-06-07  REF005  2000.0  cashflow_in 2000.0
3   2019-07-24  REF005  3000.0  cashflow_in 5000.0
5   2019-08-08  REF004  5000.0  cashflow_in 25000.0
7   2019-10-13  REF005  5000.0  cashflow_in 10000.0
8   2019-10-30  REF006  5000.0  cashflow_in 5000.0
10  2019-10-23  REF007  5000.0  cashflow_in 5000.0

推荐阅读