我有一个包含两列的pandas数据框:
column1 column2
C1 date1
C1 date2
C3 date3
C2 date4
C2 date5
... ...
第一列代表类别(C1,C2,C3),第二列代表日期,格式为YYYY-MM-DD HH-MM-SS。我需要按时间序列对数据进行分组,该时间序列包含持续时间相同(例如1周)的垃圾箱以及每个类别的出现次数。目的是显示三个曲线以及每个类别每月出现的次数。我已将column2转换为具有以下内容的日期时间索引:
df['column2']= pd.to_datetime(df['column2'])
df = df.sort_values(by='column2',ascending=True)
我知道pd.groupby(['category'])可以给我每个类别的总和或计数,但是随后我丢失了日期信息。我怎样才能达到目的?
编辑1
import pandas as pd
from datetime import datetime
import random
import time
def random_date(seed):
random.seed(seed)
d = random.randint(1, int(time.time()))
return datetime.fromtimestamp(d).strftime('%Y-%m-%d %H:%M:%S')
df = pd.DataFrame(columns=['category', 'date'])
for i in range(100):
date = random_date(i)
category = random.randint(0,2)
d = {'category': category, 'date': date}
df = df.append(d, ignore_index=True)
df = df.set_index(['date'])
df.index = pd.to_datetime(df.index)
df = df.sort_values(by='date',ascending=True)
这就是我被困住的地方。我现在希望能够绘制三个时间序列,其中一个时间段为1周,每个类别的出现次数。
我认为你需要Grouper
在DataFrame.groupby
与列名和获得计数GroupBy.size
,最后如果需要栏添加类别Series.unstack
:
df = df.groupby([pd.Grouper(freq='W'), 'category']).size().unstack(fill_value=0)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句