Shi*_*hal 2 data-analysis dataframe python-3.x pandas
我有包含 3 列的 DataFrame:CustomerId、Amount 和 Status(成功或失败)。DataFrame 没有以任何方式排序。一个 CustomerId 可以在 DataFrame 中重复多次。
我想使用以下逻辑在此 DataFrame 中引入新列:
df[totalamount]= 状态为成功的每个客户的金额总和。
我已经有一个正在运行的代码,但是 df.iterrows 需要太多时间。因此请您提供替代方法,如熊猫矢量化或 numpy 矢量化。
例如,我想从前三列创建 'totalamount' 列:
CustomerID Amount Status totalamount
0 1 5 Success 105 # since both transatctions were successful
1 2 10 Failed 80 # since one transaction was successful
2 3 50 Success 50
3 1 100 Success 105
4 2 80 Success 80
5 4 60 Failed 0
Run Code Online (Sandbox Code Playgroud)
使用where与掩盖“失败”行NaN,同时保持数据帧的长度。然后groupby是 CustomerID 和transform'Amount' 列的总和,将结果返回到每一行。
df['totalamount'] = (df.where(df['Status'].eq('Success'))
.groupby(df['CustomerID'])['Amount']
.transform('sum'))
CustomerID Amount Status totalamount
0 1 5 Success 105.0
1 2 10 Faled 80.0
2 3 50 Success 50.0
3 1 100 Success 105.0
4 2 80 Success 80.0
5 4 60 Failed 0.0
Run Code Online (Sandbox Code Playgroud)
使用where(而不是对 DataFrame 进行子集化)的原因是因为 groupby + sum 默认将整个NaN组总和为 0,因此我们不需要任何额外的东西来处理 CustomerID 4,例如。
| 归档时间: |
|
| 查看次数: |
38 次 |
| 最近记录: |