【问题标题】:How to fill in empty dates following a Pandas groupby operation?如何在 Pandas groupby 操作后填写空日期?
【发布时间】:2021-08-14 05:35:40
【问题描述】:

我有一个数据集,其中包含许多列的条目,其中之一是条目的日期。在大多数情况下,如果一个日期至少有一个日志,那么它很可能有多个日志。但是,所表示的日期也存在许多空白(例如,可能有 1 月 20 日的条目,而下一个条目是 2 月 2 日,中间的所有日期都为零条目)。

为了分析每个日期的条目,我使用 pandas groupby 操作按日期对数据进行分组。我现在想知道如何用缺失的日期填充生成的 groupby 对象,为每个对象分配一个带有 null 或 0 值的单行。

【问题讨论】:

  • 请提供示例数据集和预期输出

标签: python pandas dataframe pandas-groupby


【解决方案1】:

这是一个示例代码,因为您没有提供任何特定代码

import pandas as pd

df = pd.read_csv('data.csv')
# Convert date to datetime
df['date'] = pd.to_datetime(df['date'])
# Set date as index and sort if required
df = df.set_index('date').sort_index()

# Although there is a way with resampling,
# the fact that you have duplicates complicates things,
# so you can create date ranges and join on them
dates = pd.date_range(start=df.index[0], end=df.index[-1], freq='1d')
dates = dates.to_frame(name='date').drop(columns=['date'])
df = dates.join(df, how='left')

for date, group in df.groupby(df.index):
    print(group, end='\n\n')

打印

                 data
2017-01-01  somedata1

           data
2017-01-02  NaN

           data
2017-01-03  NaN

                 data
2017-01-04  somedata4

           data
2017-01-05  NaN

           data
2017-01-06  NaN

                   data
2017-01-07  somedata7_1
2017-01-07  somedata7_2

           data
2017-01-08  NaN

           data
2017-01-09  NaN

                  data
2017-01-10  somedata10

我使用了以下 csv

date,data
2017-01-01,somedata1
2017-01-04,somedata4
2017-01-07,somedata7_1
2017-01-07,somedata7_2
2017-01-10,somedata10

【讨论】:

    猜你喜欢
    • 2021-05-26
    • 2019-01-13
    • 2019-06-26
    • 2017-06-27
    • 2019-11-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-07
    • 2016-07-20
    相关资源
    最近更新 更多