我有一个包含几个日期字段的数据集,包括小时。我想使用其中之一作为我的 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”行?我只想计算数据集上出现的天数,而不是我没有的天数。
答案 0 :(得分:2)
将 Series.dt.date
与 DataFrame.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]