【发布时间】:2019-06-12 02:21:14
【问题描述】:
我有一个值列表,其中包含我想要的 pandas DataFrame 每一行的列索引。如何将此列标签列表映射到 DataFrame 的每一行?
如果我只是使用列表对 DataFrame 进行索引,则整个列表将应用于每一行,就像这样。
In [10]: df = pd.DataFrame(np.random.randn(5,2), columns=list('AB'))
In [11]: df
Out[11]:
A B
0 -0.082240 -2.182937
1 0.380396 0.084844
2 0.432390 1.519970
3 -0.493662 0.600178
4 0.274230 0.132885
In[12]: selection = list('ABBAA')
In[13]: selection
Out[13]: ['A', 'B', 'B', 'A', 'A']
In[14]: df[selection]
Out[14]:
A B B A A
0 -0.082240 -2.182937 -2.182937 -0.082240 -0.082240
1 0.380396 0.084844 0.084844 0.380396 0.380396
2 0.432390 1.519970 1.519970 0.432390 0.432390
3 -0.493662 0.600178 0.600178 -0.493662 -0.493662
4 0.274230 0.132885 0.132885 0.274230 0.274230
选择列表中的每个元素表示要从 DataFrame 中的相应行中选择的列。在这个例子中,我想要第一行的A,第二行和第三行的B,第四行和第五行的A。事实证明,这是上述结果的对角线。我的实际 DataFrame 要大得多,我认为构建上述结果只是为了选择对角线是没有意义的。
我当然可以通过遍历行来解决这个问题,但我希望 Pandas 有一个内置的方法来做到这一点。我正在寻找获得以下结果的方法。
In[15]: df <do something> selection
Out[15]:
0 -0.082240
1 0.084844
2 1.519970
3 -0.493662
4 0.274230
【问题讨论】:
-
你只需要选择的对角线值吗?
-
是的,
selection列表的每个元素都表示我想从不同行中获取哪一列。