我有以下数据框
import pandas as pd
import numpy as np
d = {
'ID':[1,2,3,4,5,6],
'Price1':[5,9,4,3,9,np.nan],
'Price2':[9,10,13,14,18,np.nan],
'Price3':[5,9,4,3,9,np.nan],
'Price4':[9,10,13,14,18,np.nan],
'Price5':[5,9,4,3,9,np.nan],
'Price6':[np.nan,10,13,14,18,np.nan],
'Price7':[np.nan,9,4,3,9,np.nan],
'Price8':[np.nan,10,13,14,18,np.nan],
'Price9':[5,9,4,3,9,np.nan],
'Price10':[9,10,13,14,18,np.nan],
'Type':['A','A','B','C','D','D'],
}
df = pd.DataFrame(data = d)
df
如何找到价格1至价格10之间的最大值并将其添加为新列?
以下数据帧是预期的输出。
import pandas as pd
import numpy as np
d = {
'ID':[1,2,3,4,5,6],
'Price1':[5,9,4,3,9,np.nan],
'Price2':[9,10,13,14,18,np.nan],
'Price3':[5,9,4,3,9,np.nan],
'Price4':[9,10,13,14,18,np.nan],
'Price5':[5,9,4,3,9,np.nan],
'Price6':[np.nan,10,13,14,18,np.nan],
'Price7':[np.nan,9,4,3,9,np.nan],
'Price8':[np.nan,10,13,14,18,np.nan],
'Price9':[5,9,4,3,9,np.nan],
'Price10':[9,10,13,14,18,np.nan],
'Type':['A','A','B','C','D','D'],
'first_max':[9,10,13,14,18,np.nan],
'two_max':[9,10,13,14,18,np.nan],
'three_max':[9,10,13,14,18,np.nan],
'four_max':[5,10,13,14,18,np.nan],
'five_max':[5,10,13,14,18,np.nan],
'six_max':[5,5,4,3,9,np.nan],
'seven_max':[5,5,4,3,9,np.nan],
'eight_max':[np.nan,5,4,3,9,np.nan],
'nine_max':[np.nan,5,4,3,9,np.nan],
'ten_max':[np.nan,5,4,3,9,np.nan],
}
df = pd.DataFrame(data = d)
pd.set_option('max_columns',25)
df
如何找到价格1至价格10之间的最大值并将其添加为新列?
答案 0 :(得分:4)
使用此:
m=df.filter(like='Price') #filter only Price columns
cols=['max'+str(i+1) for i in range(len(m.columns))]
#['max1', 'max2', 'max3', 'max4', 'max5', 'max6', 'max7', 'max8', 'max9', 'max10']
然后使用np.sort()
以降序对每一行进行排序,发布后,我们将创建一个数据框并在axis=1
上进行合并
df_new=pd.DataFrame(abs(np.sort(-m,axis=1)),columns=cols)
df1=pd.concat([df,df_new],axis=1)
print(df1)
ID Price1 Price2 Price3 Price4 Price5 Price6 Price7 Price8 Price9 \
0 1 5.0 9.0 5.0 9.0 5.0 NaN NaN NaN 5.0
1 2 9.0 10.0 9.0 10.0 9.0 10.0 9.0 10.0 9.0
2 3 4.0 13.0 4.0 13.0 4.0 13.0 4.0 13.0 4.0
3 4 3.0 14.0 3.0 14.0 3.0 14.0 3.0 14.0 3.0
4 5 9.0 18.0 9.0 18.0 9.0 18.0 9.0 18.0 9.0
5 6 NaN NaN NaN NaN NaN NaN NaN NaN NaN
... max1 max2 max3 max4 max5 max6 max7 max8 max9 max10
0 ... 9.0 9.0 9.0 5.0 5.0 5.0 5.0 NaN NaN NaN
1 ... 10.0 10.0 10.0 10.0 10.0 9.0 9.0 9.0 9.0 9.0
2 ... 13.0 13.0 13.0 13.0 13.0 4.0 4.0 4.0 4.0 4.0
3 ... 14.0 14.0 14.0 14.0 14.0 3.0 3.0 3.0 3.0 3.0
4 ... 18.0 18.0 18.0 18.0 18.0 9.0 9.0 9.0 9.0 9.0
5 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN