【问题标题】:Join two dataframes along columns with non-unique index沿具有非唯一索引的列连接两个数据框
【发布时间】:2017-10-18 22:14:31
【问题描述】:

我有两个数据框,我想将它们沿列连接起来。索引不是唯一的:

df1 = pd.DataFrame({'A': ['0', '1', '2', '2'],'B': ['B0', 'B1', 'B2', 'B3'],'C': ['C0', 'C1', 'C2', 'C3']}):
    A   B   C
0  0  B0  C0
1  1  B1  C1
2  2  B2  C2
3  2  B3  C3

df2 = pd.DataFrame({'A': ['0', '2', '3'],'E': ['E0', 'E1', 'E2']},index=[0, 2, 3])
    A   E
0  0  E0
1  2  E1
2  3  E2

A 应该是我的索引。我想要的是:

    A   B   C   E
0  0  B0  C0    E0
1  1  B1  C1    NAN
2  2  B2  C2    E1
3  2  B3  C3    E1

这个pd.concat([df1, df2], 1) 给了我错误:

Reindexing only valid with uniquely valued Index objects

【问题讨论】:

  • pd.concat([df1, df2], 1)
  • 错误:重新索引仅对具有唯一值的索引对象有效
  • 已发布答案...
  • 我想说,不要像这样改变你的问题......

标签: python pandas dataframe join merge


【解决方案1】:

通过使用combine_first

df1.combine_first(df2).dropna(subset=['A'],axis=0)
Out[320]: 
    A   B   C    D    E
0  A0  B0  C0   D0   E0
1  A1  B1  C1  NaN  NaN
2  A2  B2  C2   D1   E1
2  A3  B3  C3   D1   E1

编辑后:

通过使用combine_first

df1.combine_first(df2.set_index('A'))
Out[338]: 
   A   B   C    E
0  0  B0  C0   E0
1  1  B1  C1  NaN
2  2  B2  C2   E1
3  2  B3  C3   E2

或者

pd.concat([df1,df2.set_index('A')],axis=1)
Out[339]: 
   A   B   C    E
0  0  B0  C0   E0
1  1  B1  C1  NaN
2  2  B2  C2   E1
3  2  B3  C3   E2

【讨论】:

    【解决方案2】:

    也许你正在寻找一个左外merge

    df1.merge(df2, how='left')
       A   B   C    E
    0  0  B0  C0   E0
    1  1  B1  C1  NaN
    2  2  B2  C2   E1
    3  2  B3  C3   E1
    

    【讨论】:

      猜你喜欢
      • 2020-05-14
      • 2022-01-02
      • 1970-01-01
      • 2023-03-08
      • 2018-09-22
      • 2013-01-05
      • 1970-01-01
      • 2022-01-04
      • 2020-10-21
      相关资源
      最近更新 更多