如何从Pandas DataFrame中的每一行中选择特定列?

时间:2014-07-18 20:17:47

标签: python numpy pandas

我有这种格式的DataFrame:

    a   b   c
0   1   2   3
1   4   5   6
2   7   8   9
3   10  11  12
4   13  14  15

和这样的数组,列名为:

['a', 'a', 'b', 'c', 'b']

我希望提取一个数据数组,每行一个值。列名数组指定每行所需的列。在这里,结果将是:

[1, 4, 8, 12, 14]

这可以作为Pandas的单个命令,还是需要迭代?我尝试使用索引

i = pd.Index(['a', 'a', 'b', 'c', 'b'])
i.choose(df)

但是我遇到了段错误,我无法诊断,因为缺少文档。

3 个答案:

答案 0 :(得分:17)

您可以使用lookup,例如

>>> i = pd.Series(['a', 'a', 'b', 'c', 'b'])
>>> df.lookup(i.index, i.values)
array([ 1,  4,  8, 12, 14])

如果您愿意,i.index可能与range(len(i))不同。

答案 1 :(得分:1)

对于大型数据集,如果您准备将列名转换为数字索引(在本例中为简单),则可以对基本numpy数据使用索引:

df.values[arange(5),[0,0,1,2,1]]

out: array([ 1,  4,  8, 12, 14])

这比列表推导或其他显式迭代更有效。

答案 2 :(得分:0)

您始终可以使用列表理解:

[df.loc[idx, col] for idx, col in enumerate(['a', 'a', 'b', 'c', 'b'])]