Python 3.x 使用另一个数据帧的值更新数据帧的正确方法
使用另一个数据帧中的值更新一个数据帧中的多个列的正确方法是什么 假设我有两个数据帧:Python 3.x 使用另一个数据帧的值更新数据帧的正确方法,python-3.x,pandas,Python 3.x,Pandas,使用另一个数据帧中的值更新一个数据帧中的多个列的正确方法是什么 假设我有两个数据帧: import pandas as pd df1 = pd.DataFrame([['4', 'val1', 'val2.4', 'val3.4'], ['5', 'val1', 'val2.5', 'val3.5'], ['6', 'val1', 'val2.6', 'val3.6'], [
import pandas as pd
df1 = pd.DataFrame([['4', 'val1', 'val2.4', 'val3.4'],
['5', 'val1', 'val2.5', 'val3.5'],
['6', 'val1', 'val2.6', 'val3.6'],
['7', 'val1', 'val2.7', 'val3.7']],
columns=['account_id', 'field1', 'field2', 'field3'])
df2 = pd.DataFrame([['6', 'VAL2.6', 'VAL3.6'],
['5', 'VAL2.5', 'VAL3.5']],
columns=['account_id', 'field2', 'field3'])
值得注意的是,df2只有d1行(以某种随机顺序)和列的子集
我想用df2中的值替换df1中的值(如果存在,则根据帐户id加入,并进行SQL更新)
一种解决办法是
cols_to_update = ['field2', 'field3']
df1.loc[df1.account_id.isin(df2.account_id), cols_to_update] = df2[cols_to_update].values
但这并不能处理连接并导致
account_id field1 field2 field3
0 4 val1 val2.4 val3.4
1 5 val1 VAL2.6 VAL3.6
2 6 val1 VAL2.5 VAL3.5
3 7 val1 val2.7 val3.7
其中帐户_id 6现在具有错误的值
我的问题是:
分配前对
df2
的值进行排序,即
cols_to_update = ['field2', 'field3']
df1.loc[df1.account_id.isin(df2.account_id), cols_to_update] = df2.sort_values(['account_id'])[cols_to_update].values
account_id field1 field2 field3
0 4 val1 val2.4 val3.4
1 5 val1 VAL2.5 VAL3.5
2 6 val1 VAL2.6 VAL3.6
3 7 val1 val2.7 val3.7
我建议您使用熊猫数据框的功能:
df = pd.DataFrame({'A': [1, 2, 3],'B': [400, 500, 600]})
new_df = pd.DataFrame({'B': [4, 5, 6],'C': [7, 8, 9]})
df.update(new_df)
df
A B
0 1 4
1 2 5
2 3 6
非常感谢。我对两个数据帧进行了排序,以确保关键顺序与我假设的一样。