如何在数据帧中添加带有for循环的列?

2024-06-14 17:14:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个数据帧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的值应该受到循环的影响,对年龄进行一种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

你知道吗? 谢谢


Tags: 数据forageproddf1df2qxeu
3条回答

下面是一种使用.loc过滤数据的方法:

top_n = 10

values = [df2.loc[df2['age'].gt(x),'qx'].iloc[:top_n].tolist() for x in df1['age']]

coln = ['qx'+str(x) for x in range(1,11)]

df1[coln] = pd.DataFrame(values)

         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'])

在开始的时候,您应该在用qx转换df之后,尝试使用pd.df.set_index('prod',inplace=True)

相关问题 更多 >