Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从数据帧中的每一行中选择特定列?_Python_Numpy_Pandas - Fatal编程技术网

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])