熊猫排序不保持排序

时间:2015-08-08 03:29:00

标签: python-3.x pandas

将两个已排序的pandas系列相乘的正确方法是什么?

当我运行以下

import pandas as pd
x = pd.Series([1,3,2])
x.sort()
print(x)
w = [1]*3
print(w*x)

我得到了我期望的结果 - [1,2,3]

但是,当我将其更改为系列时:

w = pd.Series(w)
print(w*x)

它似乎会根据两个系列的索引相乘,因此会返回[1,3,2]

1 个答案:

答案 0 :(得分:1)

您的结果基本相同,只是排序不同。

name: 33
age:86
color: true
weight: green

规则基本上是这样的:无论何时将数据帧或系列乘以数据帧或系列,都将通过索引完成。这是什么使它成为熊猫而不是numpy。因此,必须忽略任何预分类。

但是,如果将数据框或系列乘以符合形状/大小的列表或numpy数组,则列表或数组将被视为具有与数据框或系列完全相同的索引。在这种情况下,系列或数据框的预排序可以保留,因为不会与列表或数组(根本没有索引)发生任何冲突。

根据您的尝试,这两种行为都非常可取。这就是为什么当你想要第二种类型的行为时,你会经常看到像>>> w*x 0 1 2 2 1 3 >>> pd.Series(w)*x 0 1 1 3 2 2 >>> (w*x).sort_index() 0 1 1 3 2 2 这样的答案的答案。

在这个示例中,它并不重要,因为您的列表是df1 * df2.values,并且无论哪种方式都给出相同的答案,但如果它是[1,1,1],您将获得不同的答案,而不仅仅是不同的答案排序的答案。