首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在一列中迭代项,而在另一列中引用标记。

在一列中迭代项,而在另一列中引用标记。
EN

Stack Overflow用户
提问于 2019-04-15 14:29:08
回答 2查看 38关注 0票数 1

假设我管理多个股票经纪帐户,每个帐户都有不同类型的股票。我试着写一些代码来做压力测试。

我想做的是,我有两个数据文件:

账户信息(数据):

代码语言:javascript
复制
account = {'account':['1', '1', '1', '2', '2'], 'Stock type':['A', 'A', 'B', 'B', 'C'], 'share value' = '100', '150', '200', '175', '85']}

压力测试场景(Dataframe):

代码语言:javascript
复制
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笔记本在运行后很快就会崩溃(内存不足)。

代码语言:javascript
复制
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']
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-04-15 14:53:52

我们首先可以做一个merge来将两个数据文件的数据放在一起。然后计算after shock value,最后得到每个accountsum

代码语言:javascript
复制
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

Note I使用pandas.to_numeric,因为您的值是string类型的。

票数 0
EN

Stack Overflow用户

发布于 2019-04-15 14:39:38

创建一个从Seriesmap的“股票类型”以“压力冲击”。

然后将pandas.groupby.applylambda函数一起使用,以获得所需的结果:

代码语言:javascript
复制
stress_map = test.set_index('stock type')['stress shock']

account.groupby('account').apply(lambda x: (x['Stock type'].map(stress_map) * x['share value']).sum())

输出

代码语言:javascript
复制
account
1    340.00
2    186.25
dtype: float64
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55691438

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档