我有两个数据框df1,df2,如下所述

df1

         prod  age
0  Winalto_eu   28
1  Winalto_uc   25
2      CEM_eu   30


df2

    age   qx
0    25  2.7
1    26  2.8
2    27  2.8
3    28  2.9
4    29  3.0
5    30  3.2
6    31  3.4
7    32  3.7
8    33  4.1
9    34  4.6
10   35  5.1
11   36  5.6
12   37  6.1
13   38  6.7
14   39  7.5
15   40  8.2


我想向df1添加带有for循环的新列。
新列的名称应为qx1,qx2,... qx10

for i in range(0,10):
    df1['qx'+str(i)]


qx1的值应受循环影响,对age进行某种vlookup:
例如,在第一行中,对于产品'Winalto_eu',qx1的值应为
df2 ['qx']在28 + 1岁,qx2在28 + 2岁...

目标数据框应如下所示:

         prod  age  qx1  qx2  qx3  qx4  qx5  qx6  qx7  qx8  qx9  qx10
0  Winalto_eu   28  3.0  3.2  3.4  3.7  4.1  4.6  5.1  5.6  6.1   6.7
1  Winalto_uc   25  2.8  2.8  2.9  3.0  3.2  3.4  3.7  4.1  4.6   5.1
2      CEM_eu   30  3.4  3.7  4.1  4.6  5.1  5.6  6.1  6.7  7.5   8.2


你有什么主意吗?
谢谢

最佳答案

我想这会给你想要的。我使用shift函数首先在df2中生成其他列,然后与df1合并。

import pandas as pd

df1 = pd.DataFrame({'prod': ['Winalto_eu', 'Winalto_uc', 'CEM_eu'], 'age' : [28, 25, 30]})
df2 = pd.DataFrame({'age': list(range(25,41)), 'qx': [2.7, 2.8, 2.8, 2.9, 3, 3.2, 3.4, 3.7, 4.1, 4.6, 5.1, 5.6, 6.1, 6.7, 7.5, 8.2]})

for i in range(1,11):
    df2['qx'+str(i)] = df2.qx.shift(-i)

df3 = pd.merge(df1,df2,how = 'left',on = ['age'])

关于python - 如何在数据框中添加带有for循环的列?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59903105/

10-13 07:23