提问人:Luiscri 提问时间:2/10/2021 更新时间:2/10/2021 访问量:1599
熊猫按天重新采样,而不会填写缺失的日期
Pandas resample by day without filling missing dates
问:
我有一个数据集,其中包含多个日期字段,包括小时数。我想使用其中一个作为我的 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”行?我只想计算数据集上出现的天数,而不是我没有的天数。
答:
2赞
jezrael
2/10/2021
#1
将 Series.dt.date
与 DataFrame.groupby
一起使用:
df["datetime"] = pd.to_datetime(df["datetime"])
df = df.groupby(df["datetime"].dt.date)["id"].count()
如果需要在较旧的 pandas 版本中也能很好地工作,请使用 Series.dt.normalize
:DatetimeIndex
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]
评论
0赞
Quang Hoang
2/10/2021
我会远离,因为 Pandas 玩得不是很好。dt.date
datetime.date
1赞
jezrael
2/10/2021
@QuangHoang - 是的,在一些较旧的版本中,在新的版本中应该效果更好,但同意,我可以添加规范化替代方案。谢谢。
0赞
Luiscri
2/10/2021
谢谢你的回答。如果我使用您的解决方案,然后我想按月分组,是否有可能,或者在这种情况下,我应该使用我的方法并选择?@jezrael.resample('M')
1赞
jezrael
2/10/2021
@Luiscri Tnes 是可能的,使用我的答案中的重采样解决方案或df = df.groupby(df["datetime"].dt.to_period('m')) ["id"].count()
评论
resample
groupby
count()
size()