连接两个Pandas数据框,(合并)来自相同列名称的值

时间:2020-06-07 23:10:58

标签: python pandas dataframe join

我正在使用 json_normalize 将单行数据“ 扩展”分成多行-使用原始行和扩展行中的数据填充列-数据。

在一种情况下,我在原始数据框中具有相同的列名,正在分解并重新加入的数据。

可以理解,我收到的最初错误是:

ValueError: columns overlap but no suffix specified: Index(['details'], dtype='object')

但是,指定后缀(“ _right”)会产生类似于以下内容的输出:

      status        details         details_right
0       A           752016134   
1       A           752016134   
2       A           835847477   
3       A           405296228   
4       A           193753632   
5       B           667711915   
6       A                           305304644

我正在寻找:

        status      details         
0       A           752016134   
1       A           752016134   
2       A           835847477   
3       A           405296228   
4       A           193753632   
5       B           667711915   
6       A           305304644

我正在使用的代码:

newdataframe = (pd.concat({i: json_normalize(block) for i, block in dataframe1.pop('data').items()})
           .reset_index(level=1, drop=True)
           .join(dataframe1, how='right', rsuffix='_right')
           .reset_index(drop=True))
  • 使用“数据”列中包含的json数据扩展dataframe1
  • dataframe1和“数据”都包含一个名为“详细信息”的列,我希望将其“合并”

-

检查pandas API参考,似乎是这样做的唯一方法,是在创建结果数据框之后重命名/连接列。

但是,我想在新的数据框创建步骤中执行此操作,这样,如果存在另一个重复的列,则无需“硬编码”任何列/修复程序的详细信息。

请告诉我是否有更好的方法来做我想要的事情。

谢谢!请让我知道是否可以澄清任何事情!

1 个答案:

答案 0 :(得分:2)

combine_first应该可以工作:

newdataframe = (pd.concat({i: json_normalize(block) for i, block in dataframe1.pop('data').items()})
           .reset_index(level=1, drop=True)
           .combine_first(dataframe1)
           .reset_index(drop=True))

但是也许我的逻辑有误,您需要使用combine