从索引的多列中选择最大值

时间:2017-10-04 13:27:58

标签: python pandas dataframe data-cleaning

我有一个数据框

product     Jan     Feb     March   April
Apple       10      21      8       7
Banana      9       9       11      8
Orange      20      6       4       8

对于每个给定的产品,我想知道它的各个月的最大金额。

product     Month   Value       
Apple       Feb     21      
Banana      March   11
Orange      Jan     20

如果有任何方法可以在没有明确遍历每一行的情况下执行此操作。

3 个答案:

答案 0 :(得分:2)

首先删除由assignmax创建的idxmax个新列的列product

a = df.drop('product', axis=1)
df =  df[['product']].assign(Month=a.idxmax(axis=1), Value=a.max(axis=1))
print (df)
  product  Month  Value
0   Apple    Feb     21
1  Banana  March     11
2  Orange    Jan     20

答案 1 :(得分:1)

以下是没有groupby

的解决方案之一
df.melt('product').sort_values('value').drop_duplicates(['product'],keep='last')
Out[307]: 
  product variable  value
7  Banana    March     11
2  Orange      Jan     20
3   Apple      Feb     21

答案 2 :(得分:0)

df = df.set_index('product')     
df.apply( lambda x: pd.Series([x.max(), x.idxmax()], index=['Month','Value']), axis=1).reset_index()

输出

  product  Month  Value
0   Apple     21    Feb
1  Banana     11  March
2  Orange     20    Jan

如果要重新分配值

 df[['Month', 'Value']] = df.apply( lambda x: pd.Series([x.max(), x.idxmax()]), axis=1)

 print df.reset_index()

    product  Jan  Feb  March  April  Month  Value
0   Apple   10   21      8      7     21    Feb
1  Banana    9    9     11      8     11  March
2  Orange   20    6      4      8     20    Jan