我有这种格式的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)
但是我遇到了段错误,我无法诊断,因为缺少文档。
答案 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'])]