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)