大熊猫-根据[raw_x,col_b]和[raw_y,col_c]

时间:2019-02-02 02:02:07

标签: python pandas numpy

我有一张下表(简化的一张) enter image description here

我想选择每个原始并将其Col_b值与所有其他原始的Col_c值进行比较。如果它们相等,则将匹配的原始的Col_a值分配/附加到所选原始的Col_d值

结果表如下所示 enter image description here

我了解具有多个for / while循环的传统方法。在pandas,numpy等中是否有一些有效的方法可以解决这个问题。

1 个答案:

答案 0 :(得分:2)

您可以使用transformnp.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           

您可以使用applynp.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