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