例如:
A B C
1 1 2
2 1 2
3 3 3
3 2 1
我想添加一列 D
,它表示 A
、B
和 C
中相同数量的值>.
D
2
2
3
1
最佳答案
选项 1
您可以使用 stack
+ groupby
+ value_counts
:
df['D'] = df.stack().groupby(level=0).value_counts().max(level=0)
df
A B C D
0 1 1 2 2
1 2 1 2 2
2 3 3 3 3
3 3 2 1 1
如果你想要具有最高模式的数字,链接一个 groupby
+ head
调用 -
v = (df.stack()
.groupby(level=0)
.value_counts()
.groupby(level=0)
.head(1)
.reset_index(level=0, drop=True)
)
1 2
2 2
3 3
1 1
dtype: int64
df['Num'], df['Num_Mode'] = v.index, v.values # to assign it
如果多个数具有相同的最高模式,则只返回其中一个。
选项 2
受@Wen 启发的另一个选项,使用 apply
和 pd.Series.mode
-
df['D'] = df.stack().groupby(level=0).apply(lambda x: pd.Series.mode(x).max())
或者,
df['D'] = df.apply(pd.Series.mode, 1).max(1).astype(int)
df
A B C D
0 1 1 2 2
1 2 1 2 2
2 3 3 3 3
3 3 2 1 1
关于python - 如何计算多列中相同值的个数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48363338/