[英]Updating multiple columns of df from another df
我有两个数据框, df1和df2 。 我想根据关键列从df2列(两个数据框中的公共列的名称相同)中的值更新 df1 的某些列(不是全部)。 df1可以有该键的多个条目,但在df2 中,每个键只有一个条目。
df2 :
party_id age person_name col2
0 1 12 abdjc abc
1 2 35 fAgBS sfd
2 3 65 Afdc shd
3 5 34 Afazbf qfwjk
4 6 78 asgsdb fdgd
5 7 35 sdgsd dsfbds
df1:
party_id account_id product_type age dob status col2
0 1 1 Current 25 28-01-1994 active sdag
1 2 2 Savings 31 14-07-1988 pending asdg
2 3 3 Loans 65 22-07-1954 frozen sgsdf
3 3 4 Over Draft Facility 93 29-01-1927 active dsfhgd
4 4 5 Mortgage 93 01-03-1926 pending sdggsd
在这个例子中,我想根据df2 中存在的值更新df1 中的 age, col2
。 这里的关键列是party_id
。
我尝试使用他们的键将df2映射到 dict (列明智,一次一列)。 这里key_name = party_id
和column_name = age
dict_key = df2[key_name]
dict_value = df2[column_name]
temp_dict = dict(zip(dict_key, dict_value))
然后将其映射到 df1
df1[column_name].map(temp_dict).fillna(df1[column_name])
但这里的问题是它只映射一个条目,而不是该键值的全部。在这个例子中party_id == 3
在df1 中有多个条目。
不在df2 中的键,该列的相应值应保持不变。
任何人都可以帮助我提供有效的解决方案,因为我的df1大小超过 500k? 这样所有列都可以同时更新。
df2大小适中,大约 3k 左右。
谢谢
想法是DataFrame.merge
与左连接一起使用,然后将两个 DataFrames 中相同的列获取到cols
并通过DataFrame.fillna
用原始值替换缺失值:
df = df1.merge(df2.drop_duplicates('party_id'), on='party_id', suffixes=('','_'), how='left')
cols = df2.columns.intersection(df1.columns).difference(['party_id'])
df[cols] = df[cols + '_'].rename(columns=lambda x: x.strip('_')).fillna(df[cols])
df = df[df1.columns]
print (df)
party_id age person_name col2
0 1 25.0 abdjc sdag
1 2 31.0 fAgBS asdg
2 3 65.0 Afdc sgsdf
3 5 34.0 Afazbf qfwjk
4 6 78.0 asgsdb fdgd
5 7 35.0 sdgsd dsfbds
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.