2017-04-10 132 views
1

我有一个熊猫数据帧,如:熊猫最大的价值和减去

df = pd.DataFrame({'A':[1,1,1,2,2,2,3,3,3], 
       'B':[3,2,20,1,6,2,3,22,1]}) 

我想找到在列“B”,“最大”值,然后从列中所有值减去这个最大值'B'并用新的结果创建一个新的'C'列。底部DF最大为22。

A B C 
2 1 3 -19 
1 1 2 -20 
0 1 20 -2 
3 2 1 -21 
5 2 6 -16 
4 2 2 -20 
8 3 3 -19 
7 3 22 0 
6 3 1 -21 

回答

5

您可以减去列 'B' 与列 'B' 的max的结果分配新柱:

In [25]: 
df['C'] = df['B'] - df['B'].max() 
df 

Out[25]: 
    A B C 
0 1 3 -19 
1 1 2 -20 
2 1 20 -2 
3 2 1 -21 
4 2 6 -16 
5 2 2 -20 
6 3 3 -19 
7 3 22 0 
8 3 1 -21 
1

使用sub对从其减去Bmax值:

df['C'] = df['B'].sub(df['B'].max()) 
print (df) 

    A B C 
0 1 3 -19 
1 1 2 -20 
2 1 20 -2 
3 2 1 -21 
4 2 6 -16 
5 2 2 -20 
6 3 3 -19 
7 3 22 0 
8 3 1 -21 

assign的另一种解决方案:

df = df.assign(C=df['B'].sub(df['B'].max())) 
print (df) 
    A B C 
0 1 3 -19 
1 1 2 -20 
2 1 20 -2 
3 2 1 -21 
4 2 6 -16 
5 2 2 -20 
6 3 3 -19 
7 3 22 0 
8 3 1 -21 
+0

这也适用!谢谢。 – magicsword