假设我要管理许多股票经纪帐户,每个帐户中都有不同类型的股票。我正在尝试编写一些代码来执行压力测试。
我想做的是,我有2个数据框:
帐户信息(数据框):
account = {'account':['1', '1', '1', '2', '2'], 'Stock type':['A', 'A', 'B', 'B', 'C'], 'share value' = '100', '150', '200', '175', '85']}
压力测试场景(数据帧):
test = {'stock type':['A', 'B', 'C', 'D'], 'stress shock':['0.8', '0.7', '0.75', 0.6']}
给定这两个数据框,我想为每个帐户计算压力冲击后的股票价值是多少。
即对于帐户1,冲击值= 100 * 0.8 + 150 * 0.8 + 200 * 0.7 = 340后
我尝试了一些基本的for循环,但是我的jupyter笔记本运行后很快会崩溃(内存不足)。
shocked = []
for i in range(len(account)):
for j in range(len(test)):
if account.loc[i,'Stock type'] == test.loc[j,'stock type']:
shocked.append(account.loc[i,'share value']*test.loc[j, 'stock type']
最佳答案
我们首先可以做一个merge
来将两个数据帧的数据放在一起。然后我们计算after shock value
并最终获得每个sum
的account
:
merge = account.merge(test, on='Stock type')
merge['after_stress_shock'] = pd.to_numeric(merge['share value']) * pd.to_numeric(merge['stress shock'])
merge.groupby('account')['after_stress_shock'].sum()
account
1 340.00
2 186.25
Name: after_stress_shock, dtype: float64
注意我使用了
pandas.to_numeric
,因为您的值是string
类型。关于python - 遍历一列中的项目,同时引用另一列中的标签,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55691438/