我有一个像这样的数据框:
NAME MONTH TIME
Paul Jan 3
Paul Sept 1
Joe Jan 3
Joe Aug 3
然后我使用支点将其转换为这样的df:
NAME JAN SEPT AUG
Paul 3 1 0
Joe 3 0 3
现在,我正在创建一个新列,每一行的价值最大,它看起来像这样:
NAME JAN SEPT AUG 1_MAX
Paul 3 1 0 3
Joe 3 0 3 3
然后,我在一个临时数据帧中将0分配给旧的最大值,现在得到第二个最大值,如下所示:
NAME JAN SEPT AUG 1_MAX 2_MAX
Paul 3 1 0 3 1
Joe 3 0 3 3 3
但是因为乔的值是2的3,所以在1月和8月,当我将0分配给最大的值时,对于首次出现最大值的JAN,应该将其分配为3,因此所有最大实例的值都变为0。变成这样,这不是我想要的:
NAME JAN SEPT AUG 1_MAX 2_MAX
Paul 3 1 0 3 1
Joe 3 0 3 3 0
我正在使用:
f_temp1 = df_temp1.apply(lambda x: x.replace(max(x), 0), axis = 1)
将最大值更改为零,但这将替换所有最大值,我想在行第一次出现时替换该行的最大值。
我需要一个通用的解决方案,因为我正在处理一个大数据框。
采用:
df[['1_MAX','2_MAX']]=(df.loc[:,'JAN':]
.apply(lambda x: pd.Series(np.sort(np.unique(x))[-2:]),
axis=1)
.loc[:,[1,0]])
print(df)
NAME JAN SEPT AUG 1_MAX 2_MAX
0 Paul 3 1 0 3 1
1 Joe 3 0 3 3 0
初始df
NAME JAN SEPT AUG
0 Paul 3 1 0
1 Joe 3 0 3
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句