python - 根据另一列结果(这是一个字符串)对数据框列的元素求和
问题描述
我目前有一个返回 ACTION 的数据框。根据 ACTION,它将根据 CHANGE 列中的百分比变化增加或减少 BALANCE。如果操作是 BH 或 BC,则 BALANCE 将更改 CHANGE 列中的 % BALANCE 在 B 或 SIT 天未更改 我的数据框当前的示例如下:
import pandas as pd
import numpy as np
df = pd.DataFrame()
df['ACTION'] = ('SIT','BC', 'BH', 'BH', 'BH', 'BH', 'B', 'SIT', 'SIT')
df['CHANGE'] = (0.02, -0.02, 0.17, -0.01, 0.05, -0.02, 0.02, 0.03, 0.01)
df = df[::-1]
conditions = [
df['ACTION'].eq('BC'),
df['ACTION'].eq('BH'),
df['ACTION'].eq('B'),
df['ACTION'].eq('SIT')
]
choices = [df['CHANGE'], df['CHANGE'], 0, 0]
df['GAIN/LOSS'] = np.select(conditions, choices)
df = df[::-1]
df.loc[8, 'BALANCE'] = 100.0000
for i in df.index[::-1][:-1]:
df.loc[i - 1, 'BALANCE'] = df.loc[i, 'BALANCE'] + (df.loc[i, 'BALANCE'] * df.loc[i - 1, 'GAIN/LOSS'])
print(df)
上面的代码导致以下输出:
ACTION CHANGE GAIN/LOSS BALANCE
0 SIT 0.02 0.00 116.805289
1 BC -0.02 -0.02 116.805289
2 BH 0.17 0.17 119.189070
3 BH -0.01 -0.01 101.871000
4 BH 0.05 0.05 102.900000
5 BH -0.02 -0.02 98.000000
6 B 0.02 0.00 100.000000
7 SIT 0.03 0.00 100.000000
8 SIT 0.01 0.00 100.000000
但是,我正在寻找一些代码,其中 BALANCE 仅在 BC 行上更新,并且该行总结了 B 和 BC 之后的第一个 BH 之间发生的净变化基本上我希望我的数据帧如下所示:在第 1 行BALANCE 列总结了 BC 和第一个 BH 之间的净变化,即 17%,输出如下所示:
ACTION CHANGE GAIN/LOSS BALANCE
0 SIT 0.02 0.00 117.000000
1 BC -0.02 -0.02 117.000000
2 BH 0.17 0.17 100.000000
3 BH -0.01 -0.01 100.000000
4 BH 0.05 0.05 100.000000
5 BH -0.02 -0.02 100.000000
6 B 0.02 0.00 100.000000
7 SIT 0.03 0.00 100.000000
8 SIT 0.01 0.00 100.000000
解决方案
推荐阅读
- java - 为什么在尝试保存不是新的聚合实体时出现重复条目异常?
- javascript - 如何将嵌套对象的层次结构转换为自身的平面表示,每个平面键反映其原始属性路径?
- algorithm - 在 k 天内移动 N 个项目 ((N>=k)
- python - Spyder 5.0.5 (MacOS) 上没有 Spyder 终端
- robotframework - 如何在 Robot Framework 的测试用例中导入资源文件?
- go - 无法从同一目录中的文件导入函数
- performance - 启用 API 级别的诊断日志 成本和性能是什么
- django - 直接显示来自 Digitalocean 应用平台的媒体图像
- reactjs - Next.js getStaticProps localstorage 未定义
- scenekit - 在世界空间中旋转和移动 SCNNode