Pandas - 根据另一列中引用的列名创建列

时间:2018-06-18 18:39:28

标签: python pandas dataframe mapping slice

我尝试了多种东西(地图,过滤器,连接),但似乎没有任何效果。 我想要做的是下表中最好的描述:(我需要获得"必需"列)

    colA    colB    colC    ref     required
1   a1        b1    c1      colA     a1
2   a2        b2    c2      colA     a2
3   a3        b3    c3      colB     b3
4   a4        b4    c4      colB     b4
5   a5        b5    c5      colC     c5
6   a6        b6    c6      colC     c6

上面只是一个例子 - 在实例中我有> 50列,所以做条件不会起作用......

有任何建议怎么做?

2 个答案:

答案 0 :(得分:4)

如果我正确理解您的问题,以下apply将会解决问题:

# Starting DataFrame:
>>> df
  colA colB colC   ref
1   a1   b1   c1  colA
2   a2   b2   c2  colA
3   a3   b3   c3  colB
4   a4   b4   c4  colB
5   a5   b5   c5  colC
6   a6   b6   c6  colC

df['required'] = df.apply(lambda x: x.loc[x.ref], axis=1)

# Final DataFrame:
>>> df
  colA colB colC   ref required
1   a1   b1   c1  colA       a1
2   a2   b2   c2  colA       a2
3   a3   b3   c3  colB       b3
4   a4   b4   c4  colB       b4
5   a5   b5   c5  colC       c5
6   a6   b6   c6  colC       c6

答案 1 :(得分:3)

我使用lookup method

In [85]: df['required'] = df.lookup(df.index, df.ref)

In [86]: df
Out[86]:
  colA colB colC   ref required
1   a1   b1   c1  colA       a1
2   a2   b2   c2  colA       a2
3   a3   b3   c3  colB       b3
4   a4   b4   c4  colB       b4
5   a5   b5   c5  colC       c5
6   a6   b6   c6  colC       c6