python - 基于两列合并两个数据框
问题描述
我有两个数据框:df1
和df_out
.
df1
看起来像这样
phone_number1 phone_number2
1 123 123
2 345 0
3 678 678
4 912 912
5 555 666
和df_out
phone_number address name
1 123 add1 name1
2 777777 add2 name2
3 666 add3 name3
4 555 add4 name4
并想做这样的事情
phone_number address name df1_phone_number1 df1_phone_number2
1 123 add1 name1 123 123
2 777777 add2 name2 None None
3 666 add3 name3 None 666
4 555 add4 name4 555 None
我试过这段代码,但它不会保存匹配的数据phone_number2
mergedStuff3 = pd.concat([
pd.merge(df1, df_out, how='right', left_on=['phone_number1'], right_on = ['phone_number']),
pd.merge(df1, df_out, how='right', left_on=['phone_number2', 'phone_number1'], right_on = ['phone_number', 'phone_number'])
])
解决方案
我认为您需要Series.where
通过以下方式检查会员资格Series.isin
:
m1 = df_out['phone_number'].isin(df1['phone_number1'])
m2 = df_out['phone_number'].isin(df1['phone_number2'])
df_out['df1_phone_number1'] = df_out['phone_number'].where(m1)
df_out['df1_phone_number2'] = df_out['phone_number'].where(m2)
print (df_out)
phone_number address name df1_phone_number1 df1_phone_number2
1 123 add1 name1 123.0 123.0
2 777777 add2 name2 NaN NaN
3 666 add3 name3 NaN 666.0
4 555 add4 name4 555.0 NaN
或使用numpy.where
:
m1 = df_out['phone_number'].isin(df1['phone_number1'])
m2 = df_out['phone_number'].isin(df1['phone_number2'])
df_out['df1_phone_number1'] = np.where(m1, df_out['phone_number'], None)
df_out['df1_phone_number2'] = np.where(m2, df_out['phone_number'], None)
print (df_out)
phone_number address name df1_phone_number1 df1_phone_number2
1 123 add1 name1 123 123
2 777777 add2 name2 None None
3 666 add3 name3 None 666
4 555 add4 name4 555 None
如果有更多列解决方案应更改:
for c in df1.columns:
m = df_out['phone_number'].isin(df1[c])
df_out[f'df1_{c}'] = np.where(m, df_out['phone_number'], None)
推荐阅读
- django - Django 相关下拉列表以及后端 api 调用
- sql - 在 SQL 中按条件对连续值进行分组和排序
- node.js - 运行 npm start 时出现“断言 `args[1]->IsInt32()' failed”,运行 node index.js 时没有错误
- ios - 使用 Alamofire 快速解析 JSON 时获取 nil 值
- python-3.x - 如何在 Python 3.7.x 中使用 list[customClass] 作为带有 @dataclass 的类型
- reactjs - 我添加了 webpack-server 在运行 npm start 时仍然显示此错误
- angular - Angular 2中的自动完成在选择后在输入框中显示id而不是名称
- angular - 日期列排序在 Primeng 中不起作用
- java - 在 Spring Container 中,@Autowire 如何跟踪在 setter 方法中注入的依赖项
- node.js - 有没有一种方法可以比 .populate() 更有效地验证 mongoose 中的相关文档并将其聚合在一起