【问题标题】:Merge two dataframes based on part of string Pandas根据部分字符串 Pandas 合并两个数据框
【发布时间】:2022-01-24 11:25:09
【问题描述】:

我有两个这样的 dfs:

我需要这样的最终输出:

从 df1 中搜索“unit”列并获取值(类型和版本),如果 df2 中的“unit”数据包含 df1 中的“unit”数据,则合并两个 dfs。

我尝试了几个代码,例如:

df['join'] = 1
df2['join'] = 1

dataFrameFull = df.merge(
    df_sql, on='join').drop('join', axis=1)

df1.drop('join', axis=1, inplace=True)

dataFrameFull['match'] = dataFrameFull.apply(
    lambda x: x.unit.find(x.unit), axis=1).ge(0)

但不起作用。

我也试过了:

variable = lambda x: process.extractOne(x, df["unit"])[2]  
df2['type'] = df2.loc[df["unit"].map(best_city).values, 'type'].values

同样的结果。

【问题讨论】:

  • 试试这个df1.merge(df2, on='unit', how='left')。我建议您阅读有关pd.merge 工作原理的文档。 pandas.pydata.org/docs/reference/api/… 另外,这里的做法是将数据粘贴为文本形式,而不是照片。

标签: python pandas dataframe lambda merge


【解决方案1】:

我没有完全明白你的要求(我没有足够的声誉来发表评论),但如果你想将 df1 与 df2 合并,你可以这样做:

df_merged = df1.merge(df2, how='outer', on='unit')

“如何”是您想要加入的方式:“外部”、“内部”等。

【讨论】:

    【解决方案2】:

    你可以像这样在 python 中连接两个数据帧。

    concatenated = pd.concat([df1, df2])
    

    【讨论】:

      【解决方案3】:

      我认为这应该可以满足您的需求。

      只是为了测试,我用你的一些数据制作了一些数据框。

      df_1 = pd.DataFrame({"unit" :["00_some_gh", "01_quit_df", "003/kit_ni"], "type": [52,52,56], "version" : [1.2,1.2, 2.2]})
      
      df_2 = pd.DataFrame({"unit" :["00_some_gh2", "00_some_gh3", "01_quit_df23", "01_quit_df43", "01_quit_df001", "003/kit_ni456"], "state": ["some_string","some_string","some_string","some_string","some_string","some_string"], "hardware" : ["yes", "no","yes", "no","yes", "no",]})
      

      遍历第一个 df 行并找到第二个以相同字符串开头的行。分配类型和版本值。

      for index, row in df_1.iterrows():
          df_2.loc[df_2['unit'].str.startswith(row['unit']), 'type'] = row['type']
          df_2.loc[df_2['unit'].str.startswith(row['unit']), 'version'] = row['version']
      
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-12-29
        • 1970-01-01
        • 2015-10-17
        • 2018-03-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多