Python 如何根据特定列表计算频率?
我有一个Python 如何根据特定列表计算频率?,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个数据帧,看起来像这样 date name 0 2015-06-13 00:21:25 a 1 2015-06-13 01:00:25 b 2 2015-06-13 02:54:48 c 3 2015-06-15 14:38:15 a 4 2015-06-15 15:29:28 b 我想根据特定的日期范围计算日期的出现次数,包括未出现在列中的日期(并忽略name列中的任何日期)。例如,我的日期范围可能如下所示: periods
数据帧
,看起来像这样
date name
0 2015-06-13 00:21:25 a
1 2015-06-13 01:00:25 b
2 2015-06-13 02:54:48 c
3 2015-06-15 14:38:15 a
4 2015-06-15 15:29:28 b
我想根据特定的日期范围计算日期的出现次数,包括未出现在列中的日期(并忽略name
列中的任何日期)。例如,我的日期范围可能如下所示:
periods = pd.date_range('2015-06-13', '2015-06-16', freq = 'd')
然后,我想要一个类似以下内容的输出:
date count
2015-06-13 3
2015-06-14 0
2015-06-15 2
2015-06-16 0
我找不到任何函数可以让我保留0
行。我想您可以先使用from columndate
for,然后使用byperiods
和by0
。最后通过and将float
转换为int
:
这与@jezrael的解决方案非常相似,但使用了groupby而不是value_counts:
>>> (pd.DataFrame(df.groupby(df.date.dt.date)['name']
.count()
.reindex(periods)
.fillna(0))
.rename(columns={'name': 'count'}))
count
2015-06-13 3
2015-06-14 0
2015-06-15 2
2015-06-16 0
注意:在Pandas 0.18.0中,reindex操作将计数类型从整数更改为浮点数,因此,如果使用该版本,则需要将
.astype(int)
添加到末尾。我尝试了您的解决方案,并且已安装浮点值int
。为什么?因为python2.7.10
?还是因为列中的NaN
?还是别的什么?你怎么认为?我的解决方案也返回浮点值。有趣。我正在运行pandas 0.17.1和Python 2.7.11.Hmmmm,我使用pandas
0.18.0
。也许有区别。谢谢。是的,我刚刚在熊猫1.18.0中进行了测试,并在重新编制索引后得到了彩车。
>>> (pd.DataFrame(df.groupby(df.date.dt.date)['name']
.count()
.reindex(periods)
.fillna(0))
.rename(columns={'name': 'count'}))
count
2015-06-13 3
2015-06-14 0
2015-06-15 2
2015-06-16 0