我有一个pandas数据帧,如下所示。我在数据帧的3列上分组:
Cat1
(Cat1的值可以是例如:A、B、C)Cat2
(Cat2的值可以是例如:N,M,O)AbsOfTranAmt
-AbsOfTranAmt
是TranAmt
的绝对值李>在对Cat1
、Cat2
和AbsOfTranAmt
进行分组后,下面的数据帧中有3个组。
我需要返回在TranAmt
中加起来不为零的记录(这是美元金额列)。删除取消的记录
Cat1 Cat2 AbsOfTranAmt TranAmt
A N 10 10
A N 10 -10
A N 10 10
A N 20 20
A N 20 -20
A N 30 -30
A N 30 30
A N 30 -30
A N 30 -30
A N 30 -30
输出数据帧应为:
Cat1 Cat2 AbsOfTranAmt TranAmt
A N 10 10
A N 30 -30
A N 30 -30
A N 30 -30
这是另一个示例数据:
Cat1 Cat2 AbsOfTranAmt TranAmt
A N 25 25
A N 25 25
A N 25 25
A P 25 -25
A P 25 -25
A P 25 25
A P 25 -25
A P 25 25
A P 25 25
A O 25 25
A N 25 -25
我试图避免过多的迭代,但最后需要一些迭代,尽管可能有更好的方法来实现这一点(df包含初始示例数据):
这会给你
然后,您可以使用它重新创建生成的数据帧
给你:
其思想是“计算”每三个[Cat1、Cat2、abs(TranAmt)]三元组的交易数量。正交易增加计数器,负交易减少计数器
假设数据存储在名为
df
的数据帧中:解决方案1:使用字典
定义返回数字符号的函数非常有用:
“盘点”交易:
将结果强制转换回原始格式:
注意,我故意选择不使用
df['AbsOfTranAmt']
中的值。此列对我来说似乎是多余的,因为它不包含df['TranAmt']
之外的任何信息解决方案2:使用groupby
我们再次需要一个符号函数,这次是一个系列:
“盘点”交易:
将结果强制转换回原始格式:
编辑1:添加了遵循相同逻辑的groupby解决方案
编辑2:更改了一些列名
相关问题 更多 >
编程相关推荐