,我有以下的數據幀:分配GROUPBY申請結果於母公司的數據幀
df = pd.DataFrame({'A' : ['foo', 'bar', 'foo', 'bar','foo', 'bar', 'foo', 'foo'],
'B' : ['one', 'one', 'two', 'three', 'two', 'two', 'one', 'three'],
'C' : np.random.randn(8),
'D' : np.random.randn(8)})
A B C D
0 foo one 0.478183 -1.267588
1 bar one 0.555985 -2.143590
2 foo two -1.592865 1.251546
3 bar three 0.174138 -0.708198
4 foo two 0.302215 -0.219041
5 bar two -0.034550 -0.965414
6 foo one 1.310828 -0.388601
7 foo three 0.357659 -1.610443
我想補充另一列,這將是在分區C柱的歸一化形式由A:
normed = df.groupby('A').apply(lambda x: (x['C']-min(x['C']))/(max(x['C'])-min(x['C'])))
A
bar 1 0.000000
3 0.033396
5 1.000000
foo 0 1.000000
2 0.413716
4 0.000000
6 0.441061
7 0.357787
最後,我想加入這個結果回到DF(使用建議從similar question):
df.join(normed, on='A', rsuffix='_normed')
但是,我得到一個錯誤:
ValueError: len(left_on) must equal the number of levels in the index of "right"
如何添加normed
結果傳回數據幀df
?
請注意,如果使用'transform'而不是'apply',則問題基本消失。你也可以使用groupby('A')['C']'而不是'groupby('A')'來獲得更乾淨的代碼。有關完整的語法,請參閱下面的答案。 – JohnE