根据pandas中其他列的值动态访问列

时间:2017-09-25 15:41:29

标签: python pandas

我们说我有以下数据框:

idx | X1 | X2 | X3 |  Z
-----------------------
  1 |  5 |  8 |  4 |  1
  2 |  3 |  2 |  6 |  2
  3 |  6 |  3 |  2 |  1

对于每一行,我现在想要访问Z中值所指示的列,即我想要的结果是:

idx |  X
--------
  1 |  5   # from X1
  2 |  2   # from X2
  3 |  6   # from X1

我怎样才能在熊猫中实现这一目标?

2 个答案:

答案 0 :(得分:2)

使用apply

In [3703]: df.apply(lambda x: x['X%s' % x.Z], axis=1)
Out[3703]:
0    5
1    2
2    6
dtype: int64

In [3706]: df[['idx']].assign(X=df.apply(lambda x: x['X%s' % x.Z], axis=1))
Out[3706]:
   idx  X
0    1  5
1    2  2
2    3  6

答案 1 :(得分:2)

注意:按照零,当标签订单不正确时,下面不起作用。

df.set_index('idx').apply(lambda x : x[x['Z']-1],axis=1)
Out[959]: 
idx
1    5
2    2
3    6
dtype: int64