Python 不同列中包含的值的计数器
我需要从多个列中计算值并将其分配给新列注意:我确信列的值类型是相同的。我想不出一个解决办法。我知道我可以比较两个系列,但如何比较7列并获得最频繁的值Python 不同列中包含的值的计数器,python,pandas,Python,Pandas,我需要从多个列中计算值并将其分配给新列注意:我确信列的值类型是相同的。我想不出一个解决办法。我知道我可以比较两个系列,但如何比较7列并获得最频繁的值 Column1 Column2 Column3 Result x x z x y y x y x z y neutral z x z z x z
Column1 Column2 Column3 Result
x x z x
y y x y
x z y neutral
z x z z
x z z z
抱歉,如果我在解释时没有那么明确
我试过:
df_partial.mode(axis='columns')
但是还有其他方法吗?以下方法应该有效:
from collections import Counter
df['Result']=''
for i in range(len(df)):
l=list(df.iloc[i, :])
l=[x for x in l if str(x) != 'nan']
d=dict(Counter(l))
m=sorted(list(d.values()))
if m[-1]==m[-2]:
df.Result.iloc[i]='neutral'
else:
df.Result.iloc[i]=max(d, key=d.get)
如果相同数量的值出现,可能会有所帮助?我想这是第一个。但我想指定为中立。它可以工作,但没有提供足够的功能抱歉,我错了,我做了一些更改,以便正确处理此场景。然而,我只添加了绝对相等频率的情况。如果值的频率为eg 331(某些值相等,但并非所有值),则情况如何?您希望在这个案例中得到什么结果?例如,以下7列的场景:xyxyzyeah,这实际上是另一种情况。谢谢这也应该算是我做出的改变。现在,如果两个更高的频率相等,结果将是“中性”(我想你不介意在较低的频率中相等,例如在511的情况下,尽管在较低的频率中相等,但你想要5的值)我还必须检查空字符串,因为我们首先初始化了新列l=[x对于l中的x,如果str(x)!=']