首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Pandas中用iloc乘以不同的列数

在Pandas中用iloc乘以不同的列数
EN

Stack Overflow用户
提问于 2022-06-16 15:06:07
回答 1查看 135关注 0票数 1

我有以下数据:

代码语言:javascript
复制
df = pd.DataFrame({'date' : ['2020-6','2020-07','2020-8'], 'd3_real':[1.2,1.3,0.8], 'd7_real' : [1.5,1.8,1.2], 'd14_real':[1.9,2.1,1.5],'d30_real' : [2.1, 2.2, 1.8],
                   'd7_mul':[1.12,1.1,1.15],'d14_mul':[1.08, 1.1, 1.14],'d30_mul':[1.23,1.25,1.12]})

dX_real指的是第3天、第7天和第14天的实际值。第二个是那个特定日子的每个乘数。

我想用下面的方法来计算这些预测。首先,我接受目标列(d3_real,d7_real.)然后根据具体情况,对每个乘数进行乘法。例如,要计算从d3_real到d30的预测,我需要将其乘以D7、D14和D30的乘数。

代码语言:javascript
复制
df['d30_from_d3'] = df.iloc[:,1] * df.iloc[:,5] * df.iloc[:,6] * df.iloc[:,7]
df['d30_from_d7'] = df.iloc[:,2] * df.iloc[:,6] * df.iloc[:,7]
df['d30_from_d14'] = df.iloc[:,3] * df.iloc[:,7]

有什么办法用循环来自动完成这个任务吗?我不知道如何乘每个dX_real列,而不对每一种情况使用条件,因为乘法的次数会发生变化。

这就是我所尝试的--它没有像预期的那样起作用,因为它只是在乘以第一个乘数:

代码语言:javascript
复制
pos_reals = [1,2,3]
pos_mul = [5,6,7]
clases = ['d3', 'd7','d14']

for target in pos_reals:
  for clase in pos_mul:
    df[f'f{clases}_hm_p_d30']  = df.iloc[:,target]

但是,从这里开始,我不知道如何具体说明它需要基于d3、d7和d14进行乘法的值。

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-16 15:45:50

代码语言:javascript
复制
bbb = [[1, 5, 6, 7], [2, 6, 7], [3, 7]]
ddd = ['d30_from_d3', 'd30_from_d7', 'd30_from_d14']
for i in range(0, len(ddd)):
    df[ddd[i]] = df.iloc[:, bbb[i][0]]
    for x in range(1, len(bbb[i])):
        df[ddd[i]] = df[ddd[i]] * df.iloc[:, bbb[i][x]]

输出

代码语言:javascript
复制
      date  d3_real  d7_real  d14_real  d30_real  d7_mul  d14_mul  d30_mul  \
0   2020-6      1.2      1.5       1.9       2.1    1.12     1.08     1.23   
1  2020-07      1.3      1.8       2.1       2.2    1.10     1.10     1.25   
2   2020-8      0.8      1.2       1.5       1.8    1.15     1.14     1.12   

   d30_from_d3  d30_from_d7  d30_from_d14  
0     1.785370      1.99260         2.337  
1     1.966250      2.47500         2.625  
2     1.174656      1.53216         1.680  

这里,第一个循环从'ddd‘列表中选择新列的名称,并在新列中设置第一个值。在嵌套循环中,从列表'bbb‘中获取所需列的数目,并乘以这些值。检查您的数据或显示预期的结果与您的例子。你需要检查一下是否匹配。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72648002

复制
相关文章

相似问题

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