python - 如何将第一个数据框中的列与第二个数据框中的列进行比较,并在匹配时从第二个数据框中的另一列中提取值
问题描述
考虑我有一个数据框:
a = [['A','def'],['A','xyz'],['A','uiu'], ['B','jkl'], ['C','pqr'], ['C','rty']]
df1 = pd.DataFrame(a, columns=['1', '2'])
1 2
0 A def
1 A xyz
2 A uiu
3 B jkl
4 C pqr
5 C rty
和另一个数据框:
a = [['A'], ['B'], ['C'],['D']]
df2 = pd.DataFrame(a, columns=['1'])
1
0 A
1 B
2 C
3 D
我想将 df2 中的列“1”与 df1 中的列“1”进行比较,如果它们匹配,我希望得到一个结果数据框,其中包含与“|”连接的列“2”的值 (如果有多个匹配项)。例如,上面两个数据帧的结果应该是这样的:
1 2
0 A def|xyz|uiu
1 B jkl
2 C pqr|rty
3 D NaN
解决方案
DataFrame.merge
与聚合一起使用join
:
df = df1.merge(df2, on='1').groupby('1')['2'].agg('|'.join).reset_index()
print (df)
1 2
0 A def|xyz|uiu
1 B jkl
2 C pqr|rty
编辑:对于添加 alo 不匹配的值,DataFrame.drop_duplicates
用于列的唯一值1
和DataFrame.reindex
添加缺失值:
df22 = df2.drop_duplicates(subset=['1'])
df = (df1.merge(df22, on='1')
.groupby('1')['2']
.agg('|'.join)
.reindex(df22['1'])
.reset_index())
print (df)
1 2
0 A def|xyz|uiu
1 B jkl
2 C pqr|rty
3 D NaN
推荐阅读
- php - 从表中删除以 < 开头的所有记录
- php - 如何编写sql查询以显示带有结束日期列的特定时间段的任务提醒?
- php - 使用密码字段验证编辑配置文件
- compiler-construction - 将 SSA 转换为堆栈机
- python - Pandas/Python/Dropna:在 dropna 发生后重命名标题列名称以导入 MySQL
- django - ImportError:没有名为“django_select2”的模块
- javascript - 为什么是静态类
- python - python:通过对多个列表的值求和来创建新列表
- python - Visual Studio 2017 Python“KeyError:'BREAK_SYSTEMEXIT_ZERO'”
- ios - Ionic App - 仅在 iOs 设备中运行应用程序时出现 SQLite 错误“plugin_not_installed”