![](/img/trans.png)
[英]Python/Pandas: How to do a join on matches across multiple columns
[英]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.