kin*_*s23 5 python dataframe pandas
我有一个如下所示的数据框:
NAME MONTH TIME
Paul Jan 3
Paul Sept 1
Joe Jan 3
Joe Aug 3
Run Code Online (Sandbox Code Playgroud)
我使用pivot将其转换为像这样的df:
NAME JAN SEPT AUG
Paul 3 1 0
Joe 3 0 3
Run Code Online (Sandbox Code Playgroud)
现在我正在创建一个新列,其中每行都有最大值,它看起来像这样:
NAME JAN SEPT AUG 1_MAX
Paul 3 1 0 3
Joe 3 0 3 3
Run Code Online (Sandbox Code Playgroud)
然后,我将临时数据框中的 0 分配给旧的最大值,现在获得第二大值,如下所示:
NAME JAN SEPT AUG 1_MAX 2_MAX
Paul 3 1 0 3 1
Joe 3 0 3 3 3
Run Code Online (Sandbox Code Playgroud)
但是因为 Joe 在 1 月和 8 月有 2 乘以 3,当我将 0 分配给最大的一个时,对于 JAN 来说应该是 3,这是第一次出现最大值,它会更改为 0 所有最大实例。变成这样,这不是我想要的:
NAME JAN SEPT AUG 1_MAX 2_MAX
Paul 3 1 0 3 1
Joe 3 0 3 3 0
Run Code Online (Sandbox Code Playgroud)
我在用着:
f_temp1 = df_temp1.apply(lambda x: x.replace(max(x), 0), axis = 1)
Run Code Online (Sandbox Code Playgroud)
将最大值更改为零,但这会替换所有最大值,我想在第一次出现时替换该行的最大值。
我需要一个通用的解决方案,因为我正在处理一个大数据框。
使用:
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
Run Code Online (Sandbox Code Playgroud)
初始df
NAME JAN SEPT AUG
0 Paul 3 1 0
1 Joe 3 0 3
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
334 次 |
| 最近记录: |