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