繁体   English   中英

如何测试 Python Pandas 中多列的最大连接

[英]How do I test for a maximum tie across multiple columns in Python Pandas

我需要在我的 Pandas dataframe 中的 25 列中找到最大值及其列 ID,如果第一个有双向或三向领带,则在一个新列中打印“领带”,并在其他。

这是我试图实现的 output:

一个 b c 最大值 max_id
1 3 3 3 领带
3 2 2 3 一个
1 2 3 3 c

我最初使用了以下简单组合:

df["max_id"] = df.idxmax(axis=1)
df["max_value"] = df.max(axis=1)

但是,在处理关系时,这并不符合我的要求,只返回最大值中的第一个。

我尝试了几条路线来实现我在 Pandas 中的目标。 在我下面的尝试中,我的目标是首先确定关系,但也没有运气:

df["max_id"] = df.apply(lambda x: "tie" if x.max() == df.iloc[int(x.name)]["max_value"] else "False", axis=1 )

结果是整个专栏都充满了“领带”。

我还从我在网上找到的为 3 个设置值设计的解决方案中创建了一个 for 循环,但是我对循环还不是很好,并且一直遇到砖墙。 这是我一直试图适应我更大的数据集的在线解决方案:

def max_num(a, b, c):
    if a > b and a > c:
        return a
    elif b > a and b > c:
        return b
    elif c > a and c > b:
        return c
    else:
        return “It’s a tie!”

理想情况下,希望避免循环并坚持使用 Pandas,尽管这似乎是一个相当复杂的循环。

先感谢您。

我们可以试试np.where

df['max_id'] = np.where(df.eq(df.max(1),0).sum(1)>1,'tie',df.idxmax(1))
df['max_value'] = df.max(1)

df
Out[108]: 
   a  b  c max_id  max_value
0  1  3  3    tie          3
1  3  2  2      a          3
2  1  2  3      c          3

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM