将两个已排序的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]
答案 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]
,您将获得不同的答案,而不仅仅是不同的答案排序的答案。