你想做的是transform。让我们看看以下...
col1 col2 target
0 A D 1
1 A A 0
2 A E 0
3 B A 0
4 A C 0
5 A D 1
6 B E 0
7 A C 0
8 B C 0
9 B B 0
您可以使用groupby 进行转换:
df.groupby('col1').transform(np.mean)
target
0 0.333333
1 0.333333
2 0.333333
3 0.000000
4 0.333333
5 0.333333
6 0.000000
7 0.333333
8 0.000000
9 0.000000
现在,你只需要变换的系列信息...
df.groupby('col1').transform(np.mean)['target']
0 0.333333
1 0.333333
2 0.333333
3 0.000000
4 0.333333
5 0.333333
6 0.000000
7 0.333333
8 0.000000
9 0.000000
pd.Series 可以通过几种不同的方式转换为因子。一种方法是使用pd.factorize()。
pd.factorize(df.groupby('col1').transform(np.mean)['target'])
(array([0, 0, 0, 1, 0, 0, 1, 0, 1, 1]),
Float64Index([0.333333333333, 0.0], dtype='float64'))
您只在其中寻找因子值:
pd.factorize(df.groupby('col1').transform(np.mean)['target'])[0]
array([0, 0, 0, 1, 0, 0, 1, 0, 1, 1])
现在,只需为其指定您选择的列名:)。
希望这会有所帮助...