Python 如何从数据帧中的每一行中选择特定列?
我有一个以下格式的数据帧:Python 如何从数据帧中的每一行中选择特定列?,python,numpy,pandas,Python,Numpy,Pandas,我有一个以下格式的数据帧: 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] 这是否可以作为熊猫的单个命令,或者我需要迭代?我试着使用索引 i = pd.Index([
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]
这是否可以作为熊猫的单个命令,或者我需要迭代?我试着使用索引
i = pd.Index(['a', 'a', 'b', 'c', 'b'])
i.choose(df)
但是我遇到了一个segfault,我无法诊断,因为缺少文档。您可以随时使用列表理解:
[df.loc[idx, col] for idx, col in enumerate(['a', 'a', 'b', 'c', 'b'])]
对于大型数据集,如果准备将列名转换为数字索引(在本例中很简单),则可以对基本numpy数据使用索引: 这将比列出理解或其他显式迭代更有效
其中
i.index
可以不同于range(len(i))
,如果您愿意的话。太棒了,谢谢!也可以分配给这些索引吗?您可以分配,但仅当帧是单个数据类型时(现在是这样)df.unstack().loc[zip(i.values,i.index)]=[1,2,3,4,5]
。并且必须在两侧匹配长度(也可以使用此语法进行选择);请参阅此问题:如果要添加索引,请创建一个系列:pd.series(df.lookup(i.index,i.values),index=i.index)
在pandas 1.2.0中,不推荐使用查找函数,建议使用.loc或.melt(请参阅:)
df.values[arange(5),[0,0,1,2,1]]
out: array([ 1, 4, 8, 12, 14])
>>> i = pd.Series(['a', 'a', 'b', 'c', 'b'])
>>> df.lookup(i.index, i.values)
array([ 1, 4, 8, 12, 14])