Pandas DataFrame高级切片

时间:2013-08-29 00:50:09

标签: python indexing pandas slice

我是一名R用户,我发现自己正在努力转向Python,尤其是Pandas的索引功能。

Household_id是我的第二栏。我根据此列对数据帧进行了排序,并运行了以下指令,返回了各种结果(我希望它们是相同的)。这些表达方式是否相同?如果是这样,为什么我会看到不同的结果?

In [63]: ground_truth.columns
Out[63]: Index([Timestamp, household_id, ... (continues)

In [59]: ground_truth.ix[1107177,'household_id']
Out[59]: 2

In [60]: ground_truth.ix[1107177,1]
Out[60]: 2.0

In [61]: ground_truth.iloc[1107177,1]
Out[61]: 4.0

In [62]: ground_truth['household_id'][1107177]
Out[62]: 2

PS:遗憾的是我不能发布数据(太大了)。

1 个答案:

答案 0 :(得分:4)

注意:当您按列排序时,您将重新排列索引,并假设它没有按照那种方式排序,您将拥有不等于他们的整数标签数组中的线性索引。

首先,ix首先将整数作为标签然后作为索引进行尝试,因此59和62是相同的。其次,如果索引不是0:n - 1那么1107177是一个标签,而不是整数索引,因此60和61之间的差异。就浮动投射来说,看起来你可能正在使用旧版本的熊猫。这在git master中不会发生。

Hereix上的文档。

以下是玩具DataFrame的示例:

In [1]:

df = DataFrame(randn(10, 3), columns=list('abc'))
print df
print
print df.sort('a')

           a          b          c
0      -1.80      -0.28      -1.10
1      -0.58       1.00      -0.48
2      -2.50       1.59      -1.42
3      -1.00      -0.12      -0.93
4      -0.65       1.41       1.20
5       0.51       0.96       1.28
6      -0.28       0.13       1.59
7       1.28      -0.84       0.51
8       0.77      -1.26      -0.50
9      -0.59      -1.34      -1.06

           a          b          c
2      -2.50       1.59      -1.42
0      -1.80      -0.28      -1.10
3      -1.00      -0.12      -0.93
4      -0.65       1.41       1.20
9      -0.59      -1.34      -1.06
1      -0.58       1.00      -0.48
6      -0.28       0.13       1.59
5       0.51       0.96       1.28
8       0.77      -1.26      -0.50
7       1.28      -0.84       0.51

请注意,排序的行索引是整数,它们不会映射到它们的位置。