【问题标题】:Pandas seems to be merging same dataframe twice熊猫似乎两次合并相同的数据框
【发布时间】:2021-03-26 17:44:40
【问题描述】:

我在 pandas 中有两个数据框,其中一个“datapanel”有多年的国家数据,另一个“数据”只有一年的国家数据,但还包括一个“区域指标”列为每个国家。我只是想在数据面板框架中创建一个新列,为每个国家提供“区域指标”。出于某种原因,数据框的行在此合并后几乎翻了一番,而它们应该保持不变。我做错了什么?

【问题讨论】:

  • 您的数据框中有重复项,因此您已经创建了数据框的产品,首先删除重复项或使用类似.map
  • 这能回答你的问题吗? Pandas Merging 101
  • 我仍然很困惑 - 我的原始数据面板数据框没有重复项。例如,前两行(Afghanistan 2008)只在“datapanel”中出现一次,而在“data”中根本没有出现。我不明白为什么它在此合并中重复。

标签: pandas join merge


【解决方案1】:

您要合并的键(国家/地区名称)在“datapanel”中重复(参见“阿富汗”至少提到 5 次),并且可能在“data”中也有重复,这会导致麻烦。

尝试使用不同的技术(v-lookup),类似这样(“国家名称”在“数据”中必须是唯一的):

for country in data["Country name"].values:
    indicator = data.loc[data["Country name"] == country, "Regional indicator"].item()
    datapanel.loc[datapanel["Country name"] == country, "Regional indicator"] = indicator

【讨论】:

  • 确实,有一个孤括号需要删除,抱歉。我相应地更新了我的答案。
  • 由于 Pandas 对我来说是新的,所以在掩码和“区域指示符”之间使用逗号的 .loc 对我来说似乎并不自然。我解决了它如下:for country in data["Country name"].values: indicator = data[data["Country name"] == country]['Regional indicator'].item() datapanel.loc[datapanel["Country name"] == country, "Regional indicator"] = indicator 这不是很漂亮,但我正在努力让代码格式化为代码。不是我最好的一天。 :)
  • 这也是我长期以来编写 pandas 代码的方式,但我发现现在使用loc 更容易。而且我了解到,除了风格偏好之外,还有更多的作用,请参阅这篇精彩的帖子:stackoverflow.com/a/48411543/11246056
猜你喜欢
  • 2016-05-24
  • 2017-06-11
  • 2016-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-02
相关资源
最近更新 更多