我有一个数据框
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
如果有任何方法可以在没有明确遍历每一行的情况下执行此操作。
答案 0 :(得分:2)
首先删除由assign
和max
创建的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