2014-06-27 46 views
2

我意识到这个问题类似于join or merge with overwrite in pandas,但接受的答案不适用于我,因为我想从df.join()使用on='keys'Python熊猫加入并覆盖

我有一个数据帧df它看起来像这样:

keys values 
0  0 0.088344 
1  0 0.088344 
2  0 0.088344 
3  0 0.088344 
4  0 0.088344 
5  1 0.560857 
6  1 0.560857 
7  1 0.560857 
8  2 0.978736 
9  2 0.978736 
10  2 0.978736 
11  2 0.978736 
12  2 0.978736 
13  2 0.978736 
14  2 0.978736 

然后,我有一个系列s(这是从一些df.groupy.apply()结果)使用相同的按键:

keys 
0  0.183328 
1  0.239322 
2  0.574962 
Name: new_values, dtype: float64 

基本上我想在df与该系列中的值,以取代“价值”,通过keys所以每keys块获取相同的新值。目前,我做如下:

df = df.join(s, on='keys') 
df['values'] = df['new_values'] 
df = df.drop('new_values', axis=1) 

所获得的(与指定的)结果则是:

keys values 
0  0 0.183328 
1  0 0.183328 
2  0 0.183328 
3  0 0.183328 
4  0 0.183328 
5  1 0.239322 
6  1 0.239322 
7  1 0.239322 
8  2 0.574962 
9  2 0.574962 
10  2 0.574962 
11  2 0.574962 
12  2 0.574962 
13  2 0.574962 
14  2 0.574962 

也就是说,我将其添加为新列,并通过使用on='keys'它得到校正形状。然后我给你valuesnew_values并删除new_values列。这当然是完美的,唯一的问题是我觉得它非常难看。

有没有更好的方法来做到这一点?

回答

1

你可以尝试这样的:

df = df[df.columns[df.columns!='values']].join(s, on='keys') 

确保s的名为 '价值',而不是 'new_values'。

据我所知,大熊猫并没有参加与“力覆盖”或“有警告覆盖”的能力。