假设我有一个如下的数据框.我想要的是,如果列a,b,c之间的数字出现最多,那么它应输出该数字,或者如果所有三个数字不同,则取a的数字.例如,在第一行中,1出现在1和5中最多,然后d中的输出为1.但在第二行中,列a,b,c的所有三个数字11,2,7都不同,输出是列的值a(11),因此d中的输出为11
list a b c
1 1 5 1
11 11 2 7
0 0 0 0
9 5 9 5
8 8 2 7
Run Code Online (Sandbox Code Playgroud)
预期产出
list a b c d
1 1 5 1 1
11 11 2 7 11
0 0 0 0 0
9 5 9 5 5
8 8 2 7 8
Run Code Online (Sandbox Code Playgroud)
scipy计算模式,但我很惊讶在 numpy 中没有找到这个模式。
import pandas as pd
import numpy as np
from scipy import stats
df = pd.DataFrame([[1, 1, 5, 1],
[11, 11, 2, 7],
[0, 0, 0, 0],
[9, 5, 9, 5],
[8, 8, 2, 7]],
columns=['list', 'a', 'b', 'c'])
df['d'], df['count'] = stats.mode(df[['a', 'b', 'c']].values, axis=1)
df.loc[df['count'] == 1, 'd'] = df['a']
df = df.drop('count', 1)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
253 次 |
| 最近记录: |