【发布时间】:2023-03-11 16:21:01
【问题描述】:
我是 Python 和 Pandas 的新手。我想为 Opt_1 到 Opt_7 列的每一行找到最常见的项目。请注意,由于某些原因,一些空白单元格似乎有 NaN,而在其他情况下,它有 None。
ID Col_1 Col_2 Opt_1 Opt_2 Opt_3 Opt_4 Opt_5 Opt_6 Opt_7
1 Game 1 Team 1 13
2 Game 1 Team 2 -13
3 Game 1 Team 1
4 Game 1 Team 2
5 Game 2 Team 1 -7.5 -7.5 -7.5 -7.5
6 Game 2 Team 2 7.5 7.5 7.5 7.5
7 Game 2 Team 1 -2.5 -1.5
8 Game 2 Team 2 2.5 1.5
9 Game 3 Team 1 3.5 3.5
10 Game 3 Team 2 -3.5 -3.5
11 Game 3 Team 1 -1 -1.5 -1
12 Game 3 Team 2 1 1.5 1
我已经尝试过以下代码,它对大多数行都按预期工作,但不是全部。而且速度有点慢。
def freq_value(series):
return Counter(series).most_common()[0][0]
for row in df.iterrows():
df['result'] = df.apply(lambda row: freq_value((row['Opt_1'], row['Opt_2'], row['Opt_3'], row['Opt_4'], row['Opt_5'], row['Opt_6'], row['Opt_7'])), axis=1)
以下是预期结果和实际结果:
ID Expected Actual Result
1 NaN NaN
2 NaN NaN
3 NaN NaN
4 NaN NaN
5 -7.5 -7.5
6 7.5 7.5
7 NaN NaN
8 NaN NaN
9 3.5 3.5
10 -3.5 -3.5
11 -1 NaN
12 1 NaN
有没有办法做到这一点,所以它是 100% 正确的,并且可能在没有一次遍历每一行的情况下完成?提前感谢您的任何建议。
【问题讨论】:
-
哪些点是 None,哪些点是 NaN?
标签: python pandas dataframe mode