gpt4 book ai didi

python - 查找出现最大值但如果所有值均为零则不返回任何内容的列

转载 作者:行者123 更新时间:2023-12-03 08:17:59 36 4
gpt4 key购买 nike

问题

我想在数据框中找到最大值出现的列名称(逐行),但如果行中所有值均为零,我希望它返回空字符串或 NaN。我可以使用 idxmax 获取出现最大值的列,但如果所有值都相同,则使用它会返回第一个列名称。我尝试在 df.apply lambda 中使用 idxmax 但我永远无法让它工作。

df = pd.DataFrame({'cat1':[1,3,0], 'cat2':[2,0,0], 'cat3':[2,1,0], 'issues':[3,2,0]})

issue1 issue2 issue3 issues
0 1 2 2 3
1 3 0 1 2
2 0 0 0 0

因此,问题列只是问题 1、问题 2 和问题 3 列中非零值的计数(不是总和)。

期望的输出:

  issue1  issue2  issue3    issues  top_issue
0 1 2 2 3 issue2
1 3 0 1 2 issue1
2 0 0 0 0 NaN

我想要像上面这样的顶级问题列,它为我提供其中具有最高值的列名称(第一次出现就可以),但是当没有问题(在第 3 行中)时,我想要一个 Null 或空值。

我尝试过的事情

1。使用 idxmax

我能够使用这个获得 top_issue:

issue_cols = ['issue1','issue2','issue3']
df['top_issue'] = df[issue_cols].idxmax(axis=1)

但是当问题列中的所有值都为零时,它会给出第一个问题列。

输出:

  issue1  issue2  issue3    issues  top_issue
0 1 2 2 3 issue2
1 3 0 1 2 issue1
2 0 0 0 0 issue1

2。将 idxmax 与 apply 结合使用

我尝试使用 apply - lambda 但我不断收到 idxmax 错误并且无法弄清楚。

df['top_issue'] = df.apply(lambda row: None if row['issues']==0 else row[issue_cols].idxmax(axis=1),axis=1)

这给了我一个 ValueError

ValueError: axis must be fewer than the number of dimensions (1)

将轴更改为零,导致出现类型错误

TypeError: reduction operation 'argmax' not allowed for this dtype

3。使用nlargest

df['top_issue'] = df.apply(lambda row: None if row['issues']==0 else row[issue_cols].nlargest(1).index.tolist(),axis=1)

这导致了以下错误

TypeError: Cannot use method 'nlargest' with dtype object

因此,我必须仔细检查我的所有值是否都不是对象类型,因为它们不是,所以我不知道从哪里开始。

最佳答案

您可以先将 0 替换为 NaN,然后应用 idxmax 以获得所需的输出。

issue_cols = ['issue1','issue2','issue3']
df['top_issue'] = df[issue_cols].replace(0, np.nan).idxmax(axis=1)

输出:

     issue1  issue2  issue3  issues top_issue
0 1 2 2 3 issue2
1 3 0 1 2 issue1
2 0 0 0 0 NaN

关于python - 查找出现最大值但如果所有值均为零则不返回任何内容的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68757591/

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