【问题标题】:Pandas: get unique elements then merge熊猫:获取独特的元素然后合并
【发布时间】:2020-01-27 09:08:06
【问题描述】:

我认为这应该很简单,但我很难找到解决这个问题的方法,也许是因为我不知道最好的词汇。但为了说明,假设我有三个数据框:

df1 = df({'id1':['1','2','3'], 'val1':['a','b','c']})

df2 = df({'id2':['1','2','4'], 'val2':['d','e','f']})

df3 = df({'id3':['1','5','6'], 'val3':['g','h','i']})

我想要得到的是:

comb_id    val1    val2    val3
1          a       d       g
2          b       e       n.d.
3          c       n.d.    n.d.
4          n.d.    f       n.d.
5          n.d.    n.d.    h
6          n.d.    n.d.    i

我认为它一定是某种外部合并,但到目前为止我还没有让它工作。有谁知道解决这个问题的最佳方法?

【问题讨论】:

    标签: python pandas dataframe merge


    【解决方案1】:

    对所有DataFrames 使用concatDataFrame.set_index

    df = pd.concat([df1.set_index('id1'),
                    df2.set_index('id2'),
                    df3.set_index('id3')], axis=1, sort=True)
    print (df)
      val1 val2 val3
    1    a    d    g
    2    b    e  NaN
    3    c  NaN  NaN
    4  NaN    f  NaN
    5  NaN  NaN    h
    6  NaN  NaN    i
    

    如有必要替换缺失值添加DataFrame.fillna:

    df = pd.concat([df1.set_index('id1'),
                    df2.set_index('id2'),
                    df3.set_index('id3')], axis=1, sort=True).fillna('n.d.')
    print (df)
       val1  val2  val3
    1     a     d     g
    2     b     e  n.d.
    3     c  n.d.  n.d.
    4  n.d.     f  n.d.
    5  n.d.  n.d.     h
    6  n.d.  n.d.     i
    

    【讨论】:

    • @HowardSherman,那很好,如果它对您有用,但是您是否注意到数据框对象(df1,df2,df3)val1,val2,val3 分别都是唯一的,如果我在 val 列的任何对象中添加重复值,例如在 df2['val2'] 添加 'a' 这已经存在于 df1['val1'] 中,之后您会注意到 datframe 不是唯一的
    猜你喜欢
    • 2019-08-25
    • 1970-01-01
    • 2015-06-09
    • 2021-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-01
    • 2018-10-21
    相关资源
    最近更新 更多