如何根据df1.c2的值为df1列(df2.s2或df2.s3)添加1列到df1?

时间:2018-01-31 16:26:00

标签: python pandas

df1有col:c1,c2,c3

和df2具有c1,s2,s3,s4

对于df2,c1是关键,每一行都有一个唯一值,但对于df1,c1对每一行都不是唯一的。

我想在df1中创建一个新的c4,其值由此逻辑/伪代码给出(对于每一行):

loop over df1 rows:
    loop over df2 rows:
        if df1.c1 == df2.c1 then
            if c2 == 2 then
                c4 = s2
            else if c2 == 3
                c4 = s3
            else if c2 == 4
            c4 = s4

使用合并功能时,我可以在遇到更简单的问题时执行此操作,其中c2 == 1表示所有行。但是对于具有c2的多个值的更复杂的数据集,我需要列c5包含df2中可用的不同值,具体取决于c2的值。

例如: DF1:

    c1  c2  c3
0   1   2   15
1   1   3   13
2   2   2   14

DF2:

    c1  s2  s3  s4
0   0   10  20  30
1   1   11  21  31
2   2   9   19  29

然后结果应该是:

    c1  c2  c3  c4
0   1   2   15  21
1   1   3   13  31
2   2   2   14  19

c2的值是整数0,1,... 20,我也可以将df2的列名称作为数字,所以:s1,0,1,... 20

我现在要做的是:

df1 = pd.merge(df1, df2[["c1","s1","s2","s3","s4"]], on=['c1',], how='left')
df1["c4"] = 999
for i in range(2,5):
    df1[df1.c2 == i,"c4"] = df1.loc[df1.c2 == i,'s'+str(i)]
    del df1["s"+str(i)]

0 个答案:

没有答案