我有一個熊貓數據框'df',我想在其中逐列執行一些縮放。按大小逐列縮放數字[python]
- 在'a'列中,我需要最大數爲1,最小數爲0,所有其他數據將相應地擴展。
- 然而,在'b'列中,我需要的最小數量爲1,的最大數量爲0,並且所有其他要相應地擴展。
是否有Pandas函數來執行這兩個操作?如果不是,numpy肯定會。
a b
A 14 103
B 90 107
C 90 110
D 96 114
E 91 114
謝謝!
我有一個熊貓數據框'df',我想在其中逐列執行一些縮放。按大小逐列縮放數字[python]
是否有Pandas函數來執行這兩個操作?如果不是,numpy肯定會。
a b
A 14 103
B 90 107
C 90 110
D 96 114
E 91 114
謝謝!
你可以減去min,然後除以最大值(小心0/0)。
In [11]: df
Out[11]:
a b
A 14 103
B 90 107
C 90 110
D 96 114
E 91 114
In [12]: df -= df.min() # equivalent to df = df - df.min()
In [13]: df /= df.max() # equivalent to df = df/df.max()
In [14]: df
Out[14]:
a b
A 0.000000 0.000000
B 0.926829 0.363636
C 0.926829 0.636364
D 1.000000 1.000000
E 0.939024 1.000000
要將列的順序切換(從1到0,而不是0到1):
In [15]: df['b'] = 1 - df['b']
的另一種方法,是否定B柱第一(df['b'] = -df['b']
) 。
雖然你需要爲'b'選擇'1-'。 – DSM
你需要弄亂'b'列才能讓事情翻轉。我會說乘以-1,應用sub和div,然後再乘以-1。 – TomAugspurger
或帝斯曼的方式。更容易:) – TomAugspurger
這是不是很優雅,但此兩個欄情況下,下面的工作:
#Create dataframe
df = pd.DataFrame({'A':[14,90,90,96,91], 'B':[103,107,110,114,114]})
#Apply operates on each row or column with the lambda function
#axis = 0 -> act on columns, axis = 1 act on rows
#x is a variable for the whole row or column
#This line will scale minimum = 0 and maximum = 1 for each column
df2 = df.apply(lambda x:(x.astype(float) - min(x))/(max(x)-min(x)), axis = 0)
#Want to now invert the order on column 'B'
#Use apply function again, reverse numbers in column, select column 'B' only and
#reassign to column 'B' of original dataframe
df2['B'] = df2.apply(lambda x: 1-x, axis = 1)['B']
如果我找到一個更優雅的方式(例如,使用列索引:(0或1)模2 - 1選擇應用操作中的符號,這樣只需一個應用命令就可以完成,我會讓你知道的。
這就是你如何使用sklearn
和preprocessing
模塊來完成它。具有許多用於縮放和對中數據的預處理功能。
In [0]: from sklearn.preprocessing import MinMaxScaler
In [1]: df = pd.DataFrame({'A':[14,90,90,96,91],
'B':[103,107,110,114,114]}).astype(float)
In [2]: df
Out[2]:
A B
0 14 103
1 90 107
2 90 110
3 96 114
4 91 114
In [3]: scaler = MinMaxScaler()
In [4]: df_scaled = pd.DataFrame(scaler.fit_transform(df), columns=df.columns)
In [5]: df_scaled
Out[5]:
A B
0 0.000000 0.000000
1 0.926829 0.363636
2 0.926829 0.636364
3 1.000000 1.000000
4 0.939024 1.000000
嗯,我想我需要在列b上的一些幫助:如何可以1是列中的最小數字,其中有0,以及如何可以0是列中的最大數字, 1? – logc