python - 如何在 pandas DataFrame 中填充缺失的日期组
问题描述
我的初始数据框是
df = pd.DataFrame({"a":["2020-01-01", "2020-01-06", "2020-01-04", "2020-01-07"],
"b":["a", "a", "b", "b"],
"c":[1, 2, 3,4]})
print(df)
a b c
0 2020-01-01 a 1
1 2020-01-06 a 2
2 2020-01-04 b 3
3 2020-01-07 b 4
我希望我的数据集是这样的
a b c
0 2020-01-01 a 1
1 2020-01-02 a NaN
2 2020-01-03 a NaN
3 2020-01-04 a NaN
4 2020-01-05 a NaN
5 2020-01-06 a 2
6 2020-01-04 b 3
7 2020-01-05 b NaN
8 2020-01-06 b NaN
3 2020-01-07 b 4
我试过了
d.set_index([d.a, d.b], inplace=True)
d.asfreq("D")
d.set_index([d.a, d.b], inplace=True)
d.resample("D")
但我遇到
TypeError: Only valid with DatetimeIndex, TimedeltaIndex or PeriodIndex, but got an instance of 'MultiIndex'
enter code here
我真正的 DataFrame 的列(本例中的“b”列)具有许多唯一值。
解决方案
df = pd.DataFrame({"a":["2020-01-01", "2020-01-06", "2020-01-04", "2020-01-07"],
"b":["a", "a", "b", "b"],
"c":[1, 2, 3,4]})
# make datetime
df['a'] = pd.to_datetime(df['a'])
# create a group
g = df.groupby('b')
# list comprehension with reindex and date_range then concat list of frames
df2 = pd.concat([df.set_index('a').reindex(pd.date_range(df['a'].min(),
df['a'].max(),freq='D')) for _,df in g])
# ffill column b
df2['b'] = df2['b'].ffill()
b c
2020-01-01 a 1.0
2020-01-02 a NaN
2020-01-03 a NaN
2020-01-04 a NaN
2020-01-05 a NaN
2020-01-06 a 2.0
2020-01-04 b 3.0
2020-01-05 b NaN
2020-01-06 b NaN
2020-01-07 b 4.0
推荐阅读
- css - 角度 10:在 `Ng build` 之后从资产提供的图像 url 直接在 `dist` 文件夹和 `dist->assets` 下列出
- android - 当我从适配器的 OnBindView() 执行碎片事务时,活动被破坏
- salesforce - 我希望使用 Apex Salesforce 批准 FeedItem/FeedComments 我们如何实现它?
- amazon-web-services - Boto3 和 AWS RDS:正确等待从快照创建数据库
- javascript - JavaScript design pattern or node packages for nesting of de-normalized/flattened database query results
- android - 未打开应用程序时如何设置自定义声音FCM通知反应本机
- java - 如何编写在我的项目中包含照片的路径
- google-chrome - 如何通过Firefox浏览器中的安全错误页面?
- php - 如何获取在 PHP 中以秒为单位创建文件的时间
- reactjs - 如何在材料ui的分页中将当前页号发送到onChange?