我想选择每个原始并将其Col_b值与所有其他原始的Col_c值进行比较。如果它们相等,则将匹配的原始的Col_a值分配/附加到所选原始的Col_d值
我了解具有多个for / while循环的传统方法。在pandas,numpy等中是否有一些有效的方法可以解决这个问题。
答案 0 :(得分:2)
您可以使用transform
和np.where
:
df = pd.DataFrame({'Col_a':['A1','Z7.6','B1.1','C2','A1.3','P7.6'],
'Col_b':[120,-1,78,180,6,8],
'Col_c':[-7,45,120,32,180,120]})
def f(x):
rowindx = np.where(df.Col_c == x)
res = ' '.join(df.loc[rowindx[0], 'Col_a'])
return res
df['Col_d'] = df['Col_b'].transform(f)
df
输出:
Col_a Col_b Col_c Col_d
0 A1 120 -7 B1.1 P7.6
1 Z7.6 -1 45
2 B1.1 78 120
3 C2 180 32 A1.3
4 A1.3 6 180
5 P7.6 8 120
您可以使用apply
和np.where
进行尝试:
def f(x):
rowindx = np.where(df.Col_c == x.Col_b)
res = ' '.join(df.loc[rowindx[0], 'Col_a'])
return res
df['Col_d'] = df.apply(f, axis=1)
print(df)
输出:
Col_a Col_b Col_c Col_d
0 A1 120 -7 B1.1 P7.6
1 Z7.6 -1 45
2 B1.1 78 120
3 C2 180 32 A1.3
4 A1.3 6 180
5 P7.6 8 120