Python 如何从数据帧中的原始列减去排序后的列来生成新列?

Python 如何从数据帧中的原始列减去排序后的列来生成新列?,python,pandas,Python,Pandas,这是我的熊猫数据框 >>> df grades 0 69.233627 1 70.130900 2 83.357011 3 88.206387 4 74.342212 对它进行排序会得到这样的结果 df.sort_values(by=['grades']) grades 0 69.233627 1 70.130900 4 74.342212 2 83.357011 3 88.206387 我试图得到一个新的列difference,每行

这是我的熊猫数据框

>>> df
grades
0   69.233627
1   70.130900
2   83.357011
3   88.206387
4   74.342212
对它进行排序会得到这样的结果

df.sort_values(by=['grades'])
grades
0   69.233627
1   70.130900
4   74.342212
2   83.357011
3   88.206387
我试图得到一个新的列
difference
,每行的值都是从原始列减去排序后的列的差值

但是,此代码不起作用

df['difference'] = df - df.sort_values(by=['grades'])
给我

grades
0   0.0
1   0.0
2   0.0
3   0.0
4   0.0

我遗漏了什么?

这是意料之中的,因为epandas默认按索引值对齐,所以在按原始
df.index
减去重新排序之前,请获取
0
值。为了防止,可以将值转换为numpy数组,并仅减去
系列
,如:

df['difference'] = df['grades'] - df['grades'].sort_values().to_numpy()
如果原始
数据帧中的默认索引也可以设置为RangeIndex,如:

df['difference'] = df['grades'] - df['grades'].sort_values().reset_index(drop=True)