python - 熊猫在条件下合并数据框
问题描述
假设我有一个父母df:
父_df:
id
11.0_A
121.0_B
433.0_A
32.0_A
12.0_B
我还有另外两个数据框 df_A 和 df_B。
df_A:
id, name
.
.
11, abc
433, xyz
32, jkl
df_B:
id, name
.
.
121, mno
12, pqr
我希望parent_df
根据行与适当的 df_A 或 df_B 合并。
预期结果:
parent_df
id, name
11.0_A, abc
121.0_B, mno
433.0_A, xyz
32.0_A, jkl
12.0_B, pqr
我如何实现这一目标?
我知道合并两个 df 我可以简单地做:
parent_df = parent_df.merge(df_A, on=['id'], how='inner')
但事实并非如此,我需要处理一个条件,也许还需要id
拆分.0_
。
任何帮助,将不胜感激!
解决方案
您可以使用split
and ,然后使用 and 的连接进行explode
合并:df_A
df_B
df_res = parent_df.merge(
pd.concat((
pd.concat((df_A, pd.DataFrame(['A' for _ in range(len(df_A))], columns=['AB'])), axis=1), # add a column with 'A'
pd.concat((df_B, pd.DataFrame(['B' for _ in range(len(df_B))], columns=['AB'])), axis=1), # add a column with 'B'
)), # concatenate df_A and df_B, enriched by 'AB' column
how='left',
left_on=['AB', 'id_AB'],
right_on=['AB', 'id'],
suffixes=('_x', '_y'),
)[['id_x', 'name']].rename(columns={'id_x': 'id'})
假设parent_df
,df_A
和df_B
是:
import pandas as pd
parent_df = pd.DataFrame(
data=[
['11.0_A'],
['121.0_B'],
['433.0_A'],
['32.0_A'],
['12.0_B'],
], columns=['id']
)
df_A = pd.DataFrame(
data=[
[11, 'abc'],
[433, 'xyz'],
[32, 'jkl'],
],
columns=['id', 'name']
)
df_B = pd.DataFrame(
data=[
[121, 'mno'],
[12, 'pqr'],
],
columns=['id', 'name']
)
df_res
是:
id name
0 11.0_A abc
1 121.0_B mno
2 433.0_A xyz
3 32.0_A jkl
4 12.0_B pqr
推荐阅读
- php - Curl - Php 获取使用 ajax 更新的元素内容
- sf - geom_sf:绘制多个系列
- python - 如何将特定行的熊猫数据框中的值更改为 NaN?
- c++ - 非成员友元函数重载运算符是否被继承?
- python - argparse 以验证 python 中的未知参数
- sql - Anylogic:将参数值写入数据库表
- mongodb - PostgreSQL 和 MongoDB WHERE IN 条件
- sql - 如何部署一个没有人可以看到/查看源脚本但可以执行它的编译数据库
- typescript - 即使字段“type”是 const,Typescript 也不会推断类型
- react-native - xhr 轮询错误套接字 io / React-Native / ExpressJs