我是一名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:遗憾的是我不能发布数据(太大了)。
答案 0 :(得分:4)
注意:当您按列排序时,您将重新排列索引,并假设它没有按照那种方式排序,您将拥有不等于他们的整数标签数组中的线性索引。
首先,ix
首先将整数作为标签然后作为索引进行尝试,因此59和62是相同的。其次,如果索引不是0:n - 1
那么1107177是一个标签,而不是整数索引,因此60和61之间的差异。就浮动投射来说,看起来你可能正在使用旧版本的熊猫。这在git master中不会发生。
Here是ix
上的文档。
以下是玩具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
请注意,排序的行索引是整数,它们不会映射到它们的位置。