我有以下数据框
df1 = DataFrame([['OBJ1', 10, 'BX', 'pool1', 'OBJ2'],['OBJ2', 0, '', '', 'OBJ1'],['OBJ3', 10, 'BY', 'pool2', 'OBJ4'],['OBJ4', 0, '', '', 'OBJ3'],['OBJ5', 10, 'BZ', 'pool3', '']], columns=['OBJ', 'value', 'conf', 'Res', 'Key'])
我正在尝试做的是:
我使用查找或其他一些帖子尝试了多种解决方案,但似乎没有任何效果。
df1.loc[df1['value']==0, 'conf'] = df1.loc[df1['OBJ']==df1['Key']]['conf']
失败,因为我意识到这是在用OBJ = Key查找行
使用DataFrame.merge
与left_on
和right_on
参数index
列通过创造DataFrame.reset_index
新的DataFrame
,然后将其转换index
列index
通过DataFrame.set_index
并最终设定的新volumns DataFrame.loc
:
m = df1['value'].eq(0)
cols = ['conf','Res']
df = (df1.reset_index().loc[m, ['index','OBJ']]
.merge(df1, left_on='OBJ', right_on='Key')
.set_index('index')[cols])
print (df)
conf Res
index
1 BX pool1
3 BY pool2
df1.loc[m, cols] = df
print (df1)
OBJ value conf Res Key
0 OBJ1 10 BX pool1 OBJ2
1 OBJ2 0 BX pool1 OBJ1
2 OBJ3 10 BY pool2 OBJ4
3 OBJ4 0 BY pool2 OBJ3
4 OBJ5 10 BZ pool3