簡體   English   中英

pandas 在條件下合並數據幀

[英]pandas merge dataframes on a condition

假設我有一個父母df:

parent_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')

但事實並非如此,我需要處理一個條件,也許在.0_之后拆分id也是如此。

任何幫助,將不勝感激!

您可以使用splitexplode ,然后使用df_Adf_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_dfdf_Adf_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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM