如何使用pandas查找列的最大值并按顺序排列它们?

时间:2019-05-01 12:59:00

标签: pandas

我有以下数据框

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之间的最大值并将其添加为新列?

1 个答案:

答案 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