我正尝试用另一个系列的索引重新索引一个系列,并填充缺失的值。
具有 Name Age order
0 Tom 20 1
1 nick 21 2
2 nick 19 2
3 jack 18 3
4 shiv 21 4
5 shiv 22 4
6 jim 23 5
1.0.3版的演示:
pandas
我期望两种方法的结果相同,为什么它们的行为有所不同?
答案 0 :(得分:1)
第一个选项(s1.reindex_like(s2).fillna(method='ffill')
)首先进行重新索引,保留空(NaN
)的值,然后再填充它们。
reindex_like
返回[1]:
s1.reindex_like(s2)
6 [6,inf)
2 NaN
5 NaN
0 [0,1)
4 [4,6)
7 NaN
1 [1,3)
3 [3,4)
dtype: object
现在,您看到fillna(method='ffill')
按照在这里排序的序列的顺序向前填充(即,沿着未排序的索引“向前”填充)。
相反,第二个选项(s1.reindex_like(s2, method='ffill')
)对排序后的索引进行前向填充。
您可以通过将该结果(对索引进行排序后)与首先对s2索引进行排序的结果进行比较来验证该声明:
s_when_sort_s2_before = s1.reindex_like(s2.sort_index()).fillna(method='ffill')
s_sorted_after = s1.reindex_like(s2, method='ffill').sort_index()
pd.testing.assert_series_equal(s_when_sort_s2_before, s_sorted_after)
此断言不执行任何操作(即不引发AssertionError
),因为两者确实相等。
[1]您可以通过我的dtype: object
告知我与您使用的熊猫版本不同,但是我可以重现该问题,因此我认为解决方案是可行的-请在您端进行验证。