2014-06-27 42 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'。

據我所知,大熊貓並沒有參加與「力覆蓋」或「有警告覆蓋」的能力。