我有一个按时间索引的pandas数据帧。我想知道每天发生的观察(即数据帧行)总数。
这是我的数据框:
import pandas as pd
data = {'date': ['2014-05-01 18:47:05.069722', '2014-05-01 18:47:05.119994', '2014-05-02 18:47:05.178768', '2014-05-02 18:47:05.230071', '2014-05-02 18:47:05.230071', '2014-05-02 18:47:05.280592', '2014-05-03 18:47:05.332662', '2014-05-03 18:47:05.385109', '2014-05-04 18:47:05.436523', '2014-05-04 18:47:05.486877'],
'value': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]}
df = pd.DataFrame(data, columns = ['date', 'value'])
print(df)
我想要的是这样一个数据帧(或序列):
date value
0 2014-05-01 2
1 2014-05-02 3
2 2014-05-03 2
3 2014-05-04 2
在回答了一堆堆溢出问题之后,我能得到的最接近的答案是:
df['date'].groupby(df.index.map(lambda t: t.day))
但那没有任何用处。
最佳答案
使用重采样。您需要日期列是datetime数据类型(因为它们是字符串),并且需要将其设置为使用重采样的索引。
In [13]: df['date'] = pd.to_datetime(df['date'])
In [14]: df.set_index('date').resample('D', 'count')
Out[14]:
value
date
2014-05-01 2
2014-05-02 4
2014-05-03 2
2014-05-04 2
您可以使用任意函数或作为字符串提供的内置便利函数,包括“count”和“sum”等。