【问题标题】:Join 2 data frame with special columns matching new将 2 个数据框与匹配新的特殊列连接起来
【发布时间】:2022-11-04 16:53:56
【问题描述】:

我想加入两个数据框并得到如下结果,我尝试了很多方法,但都失败了

我只想要 df2 ['A'] 上的文本,其中包含 df1 ['A'] 上的文本。请帮我更改代码

我想了 :

0  A0_link0
1  A1_link1
2  A2_link2
3  A3_link3
import pandas as pd
df1 = pd.DataFrame(
    {
        "A": ["A0", "A1", "A2", "A3"],
    })


df2 = pd.DataFrame(
    {        "A": ["A0_link0", "A1_link1", "A2_link2", "A3_link3", "A4_link4", 'An_linkn'],
             "B" : ["B0_link0", "B1_link1", "B2_link2", "B3_link3", "B4_link4", 'Bn_linkn']
    })
result = pd.concat([df1, df2], ignore_index=True, join= "inner", sort=False)
print(result)

【问题讨论】:

  • 你想要result = pd.concat([df1, df2], axis=1, ignore_index=True, join= "inner", sort=False)

标签: pandas


【解决方案1】:

创建一个中间数据框和map

d = (df2.assign(key=df2['A'].str.extract(r'([^_]+)'))
     .set_index('key'))

df1['A'].map(d['A'])

输出:

0    A0_link0
1    A1_link1
2    A2_link2
3    A3_link3
Name: A, dtype: object

或者 merge 如果你想要 df2 中的几列 (df1.merge(d, left_on='A', right_index=True))

【讨论】:

  • 这正是我想要的。但有时它无法运行
【解决方案2】:

您可以在列上将索引设置为Anpd.concat

result = (pd.concat([df1.set_index(df1['A']),
                     df2.set_index(df2['A'].str.split('_').str[0])],
                    axis=1, join="inner", sort=False)
          .reset_index(drop=True))
print(result)

    A         A         B
0  A0  A0_link0  B0_link0
1  A1  A1_link1  B1_link1
2  A2  A2_link2  B2_link2
3  A3  A3_link3  B3_link3

【讨论】:

  • 我收到错误 InvalidIndexError(self._requires_unique_msg) pandas.errors.InvalidIndexError: Reindexing only valid with unique value Index objects
【解决方案3】:
df2.A.loc[df2.A.str.split('_',expand=True).iloc[:,0].isin(df1.A)]

0    A0_link0
1    A1_link1
2    A2_link2
3    A3_link3

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-12
    • 2021-11-22
    • 2021-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    相关资源
    最近更新 更多