按照索引数组和列名对Pandas数据框进行切片

6

我希望能够使用 Pandas 数据框架来复制 NumPy 数组的行为。我想传递一个索引和列名的数组,并获取在相应的索引和列名中找到的对象列表。

import pandas as pd
import numpy as np

在numpy中:
array=np.array(range(9)).reshape([3,3])
print array
print array[[0,1],[0,1]]

[[0 1 2]
 [3 4 5]
 [6 7 8]]

[0 4]

在Pandas中:
prng = pd.period_range('1/1/2011', '1/1/2013', freq='A')
df=pd.DataFrame(array,index=prng)
print df

      0  1  2
2011  0  1  2
2012  3  4  5
2013  6  7  8

df[[2011,2012],[0,1]]

期望的输出结果:

[0 4]

我该如何切分这个数据框以使其返回与numpy相同的结果?

严格来说,这不是一个(行,列)索引数组,而是一个多维索引数组。如果我的理解是正确的,请相应地编辑标题。 - smci
1个回答

8
Pandas不支持直接获取坐标;虽然可以实现,但问题是如何指定您需要的坐标而不是不同的轴,例如:df.iloc[[0,1],[0,1]] 意味着给出第0和第1行以及第0和第1列。 无论如何,您可以这样做: 您更新了问题并表示您想要从索引值开始。
In [19]: row_indexer = df.index.get_indexer([Period('2011'),Period('2012')])

In [20]: col_indexer = df.columns.get_indexer([0,1])

In [21]: z = np.zeros(df.shape,dtype=bool)

In [22]: z[row_indexer,col_indexer] = True

In [23]: df.where(z)
Out[23]: 
       0   1   2
2011   0 NaN NaN
2012 NaN   4 NaN
2013 NaN NaN NaN

这似乎更容易一些(这些是位置)。
In [63]: df.values[[0,1],[0,1]]
Out[63]: array([0, 4])

或者这样;由于期间索引将从字符串中正确切片(不要在此处使用整数)。
In [26]: df.loc['2011',0]
Out[26]: 0

In [27]: df.loc['2012',1]
Out[27]: 4

我实际上表达了我的问题不清楚。我想使用索引和列名来切片,我编辑了我的问题以反映这一点。抱歉没有表述清楚。 - Artturi Björk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接