【问题标题】:merge two dataframe that share the same column value合并两个共享相同列值的数据框
【发布时间】:2021-12-17 19:16:02
【问题描述】:

我有两个数据框 df1 =

C L O D LN M x y z w
FR 312 73 2021-04-09 1 W 1 0 0 0
FR 312 73 2021-04-09 1 W 0 1 0 0
FR 312 73 2021-04-09 1 W 0 0 1 0
FR 312 73 2021-04-09 3 W 1 0 0 0
FR 312 73 2021-04-09 3 W 0 1 0 0
FR 312 73 2021-04-09 3 W 0 0 1 0
FR 312 73 2021-04-09 4 W 1 0 0 0
FR 312 73 2021-04-09 4 W 0 1 0 0
FR 312 73 2021-04-09 4 W 0 0 1 0
FR 312 73 2021-04-09 5 W 1 0 0 0
FR 312 73 2021-04-09 5 W 0 1 0 0

df2 =

C L O D LN M x y z w
FR 312 73 2021-04-09 1 L 1 0 0 1

我想在 C 上连接或合并这 2 个 df |大号 | ○ | D | LN

想要的输出 =

C L O D LN M x y z w
FR 312 73 2021-04-09 1 W 1 0 0 0
FR 312 73 2021-04-09 1 W 0 1 0 0
FR 312 73 2021-04-09 1 W 0 0 1 0
FR 312 73 2021-04-09 1 L 0 0 0 1

感谢您的帮助

【问题讨论】:

标签: python pandas dataframe merge concatenation


【解决方案1】:

正如我试图在 cmets 中指出的那样,一个可能的解决方案是:

  • 复制df2,并删除不需要的列(用于合并)
  • df2_duplidf1 上使用内部合并
  • 可能删除Nan 行,不确定是否需要此步骤
  • 结合 df2df_merge (concat)
  • 利润
# initialize
df1 = pd.DataFrame(data={'A': [1, 2, 3], 'B': ["abc", "abc", "cde"], 'C': [0, 1, 0]})
df2 = pd.DataFrame(data={'A': [1, 2], 'B': ["abc", "abc"], 'C': [5, 5]})

# duplicate and drop
df2_dupli = df2.copy()
df2_dupli = df2_dupli.drop(columns=['C'])

# inner merge
df_merge = pd.merge(df1, df2_dupli,  how='inner', left_on=['A','B'], right_on = ['A','B'])

# combine
df_out = pd.concat([df_merge, df2])
>>> df1
   A    B  C
0  1  abc  0
1  2  abc  1
2  3  cde  0

>>> df2
   A    B  C
0  1  abc  5
1  2  abc  5

>>> df_out
   A    B  C
0  1  abc  0
1  2  abc  1
0  1  abc  5
1  2  abc  5

df_out 现在包含来自df2 的所有行,以及来自df1 在指定列中与df2 具有相同值的行。

【讨论】:

    【解决方案2】:

    您可以设置索引,使其与您要匹配的数据对齐:

    df1.set_index(['C','L','O','D','LN'], inplace=True) 
    df2.set_index(['C','L','O','D','LN'], inplace=True) 
    

    然后您可以将两个 dfs 合并为一个包含所有记录的 dfs

    df_concat = pd.concat([df1, df2], axis=0)
    

    剩下的就是找到两个数据帧中存在的索引,并在连接的 df 上使用它:

    i2keep = set(df1.index.tolist()) and set(df2.index.tolist())
    df_concat.loc[i2keep,:].reset_index()
    

    产量

        C    L   O         D  LN  M  x  y  z  w                                                                             
    0  FR  312  73  4/9/2021   1  W  1  0  0  0                                                                             
    1  FR  312  73  4/9/2021   1  W  0  1  0  0                                                                             
    2  FR  312  73  4/9/2021   1  W  0  0  1  0                                                                             
    3  FR  312  73  4/9/2021   1  L  1  0  0  1 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-20
      • 1970-01-01
      • 1970-01-01
      • 2017-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多