python - Pandas:获取独特的元素然后合并

标签 python pandas dataframe merge

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

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

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

最佳答案

使用concatDataFrame.set_index对于所有 DataFrame:

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

关于python - Pandas:获取独特的元素然后合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59927915/

相关文章:

python - 在自己的 Ubuntu 服务器上部署 Flask 应用程序错误

python - 如何解决输入语句后立即关闭程序的问题

python - 根据每个 DataFrame 行的匹配值将列表的值添加到 pandas DataFrame 列

python - 如何修剪 pandas.read_csv 中的标题值

python - 将具有多个自变量和多个参数的函数传递给 scipy optimize minimize

python - Django make_password 以编程方式创建大量用户列表太慢

python - 按两列将值映射到 DataFrame 上

python - 根据另一个数据框的多列过滤数据框

python - 使用其他列的所有数据绘制列中出现次数最多的 (n) 个值

如果组合存在于另一个数据框中,则 R 检查行的行