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 column
date
for,然后使用by
periods
和by
0
。最后通过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