gpt4 book ai didi

python - 如何仅替换数据帧 Pandas 中最大值的第一个实例?

转载 作者:行者123 更新时间:2023-12-05 00:44:38 32 4
gpt4 key购买 nike

我有一个看起来像这样的数据框:

NAME   MONTH  TIME
Paul Jan 3
Paul Sept 1
Joe Jan 3
Joe Aug 3

我使用pivot将其转换为这样的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)

将最大值更改为零,但这会替换所有最大值,我想在第一次出现时替换该行的最大值。

我需要一个通用的解决方案,因为我在一个大数据框中工作。

最佳答案

使用 numpy 到 sort底层数组(假设 'Name' 在索引中)并连接最大值。

import pandas as pd
import numpy as np
N = 2

pd.concat([df, pd.DataFrame(np.sort(df.to_numpy(), axis=1)[:, -N:],
index=df.index,
columns=[f'{i}_MAX' for i in range(N, 0, -1)])],
axis=1)
      JAN  SEPT  AUG  2_MAX  1_MAX
NAME
Paul 3 1 0 1 3
Joe 3 0 3 3 3

关于python - 如何仅替换数据帧 Pandas 中最大值的第一个实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59793144/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com