2016-10-05 19 views
0

古い値、新しい値およびそれが属する列を含む別のデータフレームが与えられた場合、変更に関する情報を使用してデータフレームを更新する方法を教えてください。たとえば は:pandasデータフレームを別のデータフレームからの値で更新する

>>> my_df 
    x y z 
0 1 2 5 
1 2 3 9 
2 8 7 2 
3 3 4 7 
4 6 7 7 

my_df_2が変更された値とその列に関する情報が含まれています

>>> my_df_2 
    changed_col old_value new_value 
0  x    2    10 
1  z    9    20 
2  x    1    12 
3  y    4    23 

今となっmy_dfようにmy_dfことを更新するmy_df_2の情報を使用する方法:

>>> my_df 
    x  y  z 
0 12 2  5 
1 10 3  20 
2 8  7  2 
3 3  23 7 
4 6  7  7 

答えて

2

次のように変更の辞書を作成できます。

d = {i: dict(zip(j['old_value'], j['new_value'])) for i, j in my_df_2.groupby('changed_col')} 

d 
Out: {'x': {1: 12, 2: 10}, 'y': {4: 23}, 'z': {9: 20}} 

次にDataFrame.replaceでそれを使用します。

my_df.replace(d) 
Out: 
    x y z 
0 12 2 5 
1 10 3 20 
2 8 7 2 
3 3 23 7 
4 6 7 7 
0

あなたはupdateメソッドを使用することができます。 http://pandas.pydata.org/pandas-docs/version/0.17.1/generated/pandas.DataFrame.update.html

例を参照してください:

old_df = pd.DataFrame({"a":np.arange(5), "b": np.arange(4,9)}) 

+----+-----+-----+ 
| | a | b | 
|----+-----+-----| 
| 0 | 0 | 4 | 
| 1 | 1 | 5 | 
| 2 | 2 | 6 | 
| 3 | 3 | 7 | 
| 4 | 4 | 8 | 
+----+-----+-----+ 

new_df = pd.DataFrame({"a":np.arange(7,8), "b": np.arange(10,11)}) 
+----+-----+-----+ 
| | a | b | 
|----+-----+-----| 
| 0 | 7 | 10 | 
+----+-----+-----+ 

old_df.update(new_df) 
+----+-----+-----+ 
| | a | b | 
|----+-----+-----| 
| 0 | 7 | 10 | #Changed row 
| 1 | 1 | 5 | 
| 2 | 2 | 6 | 
| 3 | 3 | 7 | 
| 4 | 4 | 8 | 
+----+-----+-----+ 
関連する問題