熊猫按天重新采样而不填充缺失的日期

时间:2021-02-10 13:45:09

标签: python pandas

我有一个包含几个日期字段的数据集,包括小时。我想使用其中之一作为我的 df 索引,并计算每天创建的条目数。换句话说,如果我有:

Date | Several features
2020-02-08 10h00 | ...
2020-02-08 11h00 | ...
2020-02-10 10h00 | ...
2020-02-10 11h00 | ...
2020-02-10 13h00 | ... 

我想得到:

2020-02-08 | 2
2020-02-10 | 3

为此,我正在做:

df["datetime"] = pd.to_datetime(df["datetime"])
df = df.set_index('datetime')
df.resample('D')["id"].count()

其中 id 是每个条目的唯一标识符。

但是,我得到以下输出:

2020-02-08 | 2
2020-02-09 | 0
2020-02-10 | 3

如何去掉“2020-02-09”行?我只想计算数据集上出现的天数,而不是我没有的天数。

1 个答案:

答案 0 :(得分:2)

Series.dt.dateDataFrame.groupby 一起使用:

df["datetime"] = pd.to_datetime(df["datetime"])
df = df.groupby(df["datetime"].dt.date)["id"].count()

如果需要 DatetimeIndex 在较旧的 Pandas 版本中也能正常工作,请使用 Series.dt.normalize

df["datetime"] = pd.to_datetime(df["datetime"])
df = df.groupby(df["datetime"].dt.normalize())["id"].count()

在您的解决方案中,如果生成缺失值,请删除它们:

df["datetime"] = pd.to_datetime(df["datetime"])
df = df.set_index('datetime').resample('D')["id"].count().dropna()

或删除 0 行:

df["datetime"] = pd.to_datetime(df["datetime"])
df = df.set_index('datetime').resample('D')["id"].count().loc[lambda x: x!= 0]