如何将数据框中的人口单元格与现有数据框合并和重复?

Posted

技术标签:

【中文标题】如何将数据框中的人口单元格与现有数据框合并和重复?【英文标题】:How do I merge and repeat population cells in a data frame with existing data frame? 【发布时间】:2019-11-25 12:45:22 【问题描述】:

我有一个关于美国酒驾的数据框。它按州和年份列出了所有事件。每年有多个条目。我每个州数据框的单独人口规模每年有一个条目。如何将人口数据框中的人口列添加到醉酒驾驶数据框中并每年重复多次输入?现在它只是在醉酒驾驶数据框下方添加人口数据框,而不合并它们。我会很感激任何人的帮助。卡在这个问题上几天了。

我尝试了多种不同的方法,使用 concat、merge、append 等。

df = pd.concat([df, df_pops], sort=False)
df = pd.merge(df, df_pops)

我需要最终的数据框看起来像这样:

STATE      MONTH YEAR FATALS DRUNK_DR POPULATION
Oregon     1     2017   1       1      4,146,600
Oregon     2     2017   0       1      4,146,600
Oregon     3     2017   1       2      4,146,600
...

这是我得到的:

         STATE         MONTH    YEAR    FATALS  DRUNK_DR  POPULATION
5619    Oregon          1.0     2017    1.0      0.0        NaN
5620    Oregon          1.0     2017    1.0      0.0        NaN
5621    Oregon          1.0     2017    1.0      0.0        NaN
... ... ... ... ... ... ...
30      Oregon          NaN     2017    NaN      NaN       4,146,600
31      Oregon          NaN     2016    NaN      NaN       4,091,400
32      Oregon          NaN     2015    NaN      NaN       4,016,900

【问题讨论】:

感谢 Brendan 修复了问题的格式。这是我第一次发帖,还在学习中。 【参考方案1】:

合并是正确的;你只是缺少语法。我建议阅读很有帮助的pandas documentation on merge

df1 = pd.DataFrame('STATE': 0: 'Oregon', 1: 'Oregon', 2: 'Oregon',
                    'MONTH': 0: 1.0, 1: 1.0, 2: 1.0,
                    'YEAR': 0: 2017, 1: 2017, 2: 2017,
                    'FATALS': 0: 1.0, 1: 1.0, 2: 1.0,
                    'DRUNK_DR': 0: 0.0, 1: 0.0, 2: 0.0)

df2 = pd.DataFrame('STATE': 0: 'Oregon', 1: 'Oregon', 2: 'Oregon',
                    'YEAR': 0: 2017, 1: 2016, 2: 2015,
                    'POPULATION': 0: '4,146,600', 1: '4,091,400', 2: '4,016,900')

merged = df1.merge(df2, how='left', left_on=['STATE','YEAR'], right_on=['STATE','YEAR'])

给予

    STATE  MONTH  YEAR  FATALS  DRUNK_DR POPULATION
0  Oregon    1.0  2017     1.0       0.0  4,146,600
1  Oregon    1.0  2017     1.0       0.0  4,146,600
2  Oregon    1.0  2017     1.0       0.0  4,146,600

【讨论】:

谢谢。刚刚尝试过并收到此错误消息:ValueError:您正在尝试合并对象和 int64 列。如果你想继续,你应该使用 pd.concat @pfistermiyagi 听起来您的year 列在一个数据帧中是一个字符串(对象),而在另一个数据帧中是一个整数(int64)。您需要转换数据类型以正确合并 - 例如,使用df1['YEAR'].astype(int)(适用于您自己的代码)。 成功了!非常感谢。虽然我必须先转换为字符串然后再转换为 int。 df['YEAR'] = df['YEAR'].astype(str).astype(int)

以上是关于如何将数据框中的人口单元格与现有数据框合并和重复?的主要内容,如果未能解决你的问题,请参考以下文章

需要合并数据框中的两列[重复]

将重复记录合并到 pyspark 数据框中的单个记录中

将 R 中的数据帧连接/合并为向量类型单元格

如何在 R 中合并同一数据框中的行(基于特定列下的重复值)?

合并数据框中的行[重复]

自合并后 Pandas 数据框中的重复项