【发布时间】:2018-11-13 16:58:37
【问题描述】:
在我的数据框的几年和几个月之间,我有很多缺失的数据,如下所示:
Year Month State Value
1969 12 NJ 5500
1969 12 NY 6418
1970 8 IL 10093
1970 12 WI 6430
1970 7 NY 6140
1971 10 IL 10093
1971 6 MN 6850
1971 3 SC 7686
1972 12 FL 8772
2016 1 NJ 9000
对于每个州,我需要填写从年初到 2018 年的所有缺失数据,但唯一存在的数据大多在 1969 年至 1990 年之间,所以我只需要填写空白即可。
所需的输出(对于新泽西州,但所有州都需要)是:
Year Month State Value
1969 12 NJ 5500
1970 1 NJ 5500
1970 2 NJ 5500
1970 3 NJ 5500
1970 4 NJ 5500
1970 5 NJ 5500
1970 6 NJ 5500
.
.
1970 12 NJ 5500
.
.
2010 1 NJ 5500
2010 2 NJ 5500
2010 3 NJ 5500
.
.
2018 1 NJ 9000
我尝试将月份转换为 1-12 个月的分类值,重新组合并重置索引,然后使用 ffill 将这些值划分为新创建的列索引,例如:
df['Month'] = pd.Categorical(df['Month'], categories=range(1, 13))
df = df.groupby(['State', 'Year', 'Month']).first().reset_index()
df['Value'] = df.groupby('Region')['Value'].ffill()
但是这个方法给了我像这样的 NaN 值:
State Year Month Value
NJ 1969 12 5500.0
NJ 1970 1 nan
NJ 1970 2 nan
NJ 1970 3 nan
.
.
NJ 2016 1 9000.0
我不明白为什么这种方法以前有效,因为我已经在其他数据上进行了实际结果的测试。
【问题讨论】:
-
问题中没有提到
Region列,它从哪里来? -
这是我从每个不应该存在的州中建立的类别。
-
那么,当问题中未包含该问题并随后将其发布到您自己的答案中时,读者如何知道您在哪里以及如何构建它?问题本身似乎没有偏离轨道?看到问题和答案,一切都令人困惑和矛盾。
-
我将更改我的问题以在我的答案中包含“区域”错误和更多信息,以澄清问题所在,因为我现在无法删除此问题。希望这就足够了。
-
所做的更改。谢谢你,@pygo。
标签: python python-3.x pandas dataframe missing-data