python - 尝试在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 =“现金流入”}
解决方案
我可能不明白你的问题的意图。如果要按帐户计算总数,可以使用以下代码实现。这符合你的意图吗?
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
推荐阅读
- visual-studio - Visual Studio 不显示文件夹和类
- javascript - 如何阻止可拖动元素从画布中拖动
- rust - Rust - 返回对结构拥有的 Vec 中元素的可变引用
- sql-server - 在创建临时表时或在填充临时表后向临时表添加索引更好吗?
- batch-file - 使用 %~dp0 将文件路径替换为批处理文件
- amazon-web-services - 无法连接到 aws elastic beanstalk 上的 datomic
- cucumber - 如何在 Jira Xray 中为场景大纲添加预场景?
- javascript - 为什么我的 javascript 和引导灯箱代码不能一起运行?
- javascript - 如何防止 div 相互重叠以及如何使它们在另一个 div 边界内移动
- swift - 如何将多个文件中的 IBOutlets 连接到 Storyboard 中的同一个对象?