2017-04-10 160 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