![](/img/trans.png)
[英]Adding data to columns in a dataframe based on condition on column values of another dataframe
[英]Update certain values of a column from another dataframe based on condition of multiple columns
我的数据框1:
id filler ent seg val text
1 M,0-10 CP BEC 20 abc
2 M,10-20 D BWC 30 abc
3 Y,0-10 CP CCD 40 abc
4 Y,10-20 D CFC 50 abc
数据框2:
id filler ent seg val text
1 M,0-10 CP BEC 20 xyz
2 Y,10-20 D CFC 50 xyz
需要创建一个结果 dataframe:
id filler ent seg val text
1 M,0-10 CP BEC 20 xyz
2 M,10-20 D BWC 30 abc
3 Y,0-10 CP CCD 40 abc
4 Y,10-20 D CFC 50 xyz
它检查除文本之外的所有列是否具有相同的值,然后通过 dataframe 2 更新 dataframe1 我的 dataframe1 有 100 行,dataframe2 有 20 行。
您可以在 dataframe1 上执行 dataframe2 的左合并,并使用指示符列查找 dataframe1 中需要更新的值。
columns = ['id','filler','ent','seg','val','text']
df1 = pd.DataFrame([
[1, 'M,0-10','CP','BEC',20, 'abc'],
[2,'M,10-20','D','BWC',30,'abc'],
[3,'Y,0-10','CP','CCD',40,'abc'],
[4,'Y,10-20','D','CFC',50,'abc'],
], columns=columns)
df2 = pd.DataFrame([
[1,'M,0-10','CP','BEC',20,'xyz'],
[4,'Y,10-20','D','CFC',50,'xyz'],
], columns=columns)
在 dataframe1 上合并 dataframe2,带有指示符列
columns_merge = [x for x in columns if x!='text']
updated = df1.merge(df2, on=columns_merge, how='left', indicator=True)
根据指标列比较并设置需要更新的内容。
same = updated['_merge']=='both'
updated.loc[same,'text_x'] = updated.loc[same,'text_y']
删除和重命名列
updated.drop(columns=['text_y','_merge'], inplace=True)
updated.rename(columns = {'text_x': 'text'}, inplace=True)
更新=
id filler ent seg val text
0 1 M,0-10 CP BEC 20 xyz
1 2 M,10-20 D BWC 30 abc
2 3 Y,0-10 CP CCD 40 abc
3 4 Y,10-20 D CFC 50 xyz
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.