【问题标题】:Join Two Pandas Dataframes, (Merging) Values from Identical Column Names加入两个 Pandas 数据框,(合并)来自相同列名的值
【发布时间】:2020-09-26 20:56:55
【问题描述】:

我正在使用 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))
  • dataframe1 被扩展,使用“data”列中包含的 json 数据
  • dataframe1 和“data”都包含一个名为“details”的列,我想“合并”

--

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

但是,我想在新的数据框创建步骤中执行此操作,以便如果有 另一个 重复列,我不需要“硬编码”任何列/修复详细信息。

如果有更好的方法来做我正在寻找的事情,请告诉我。

谢谢!如果我能澄清任何事情,请告诉我!

【问题讨论】:

  • 你试过how='left'而且没有后缀吗?
  • @SyKer combine_first 似乎已经成功了。 how='left' 没有拉出我需要的行。

标签: python pandas dataframe join


【解决方案1】:

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

【讨论】:

  • 谢谢!在进行了一些初步测试后,这似乎完美无缺!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-18
  • 2021-12-17
相关资源
最近更新 更多