我有一个包含日期,类别和值的数据框。我想绘制每个类别的总和汇总值。例如,我想对3天期间发生的值进行求和,但是对于每个类别单独计算。
似乎过于复杂的尝试是
import random
import datetime as dt
import pandas as pd
random.seed(0)
df=pd.DataFrame([[dt.datetime(2000,1,random.randint(1,31)), random.choice("abc"), random.randint(1,3)] for _ in range(100)], columns=["date", "cat", "value"])
df.set_index("date", inplace=True)
result=df.groupby("cat").resample("3d", how="sum").unstack("cat").value.fillna(0)
result.plot()
这基本上是正确的逻辑,但重新采样没有固定的开始,因此3天期间的日期范围不在类别之间对齐(我得到NaN / 0值)
实现这一情节的更好方法是什么?
答案 0 :(得分:6)
我认为您应该按cat
和date
分组:
df = pd.DataFrame([[dt.datetime(2000,1,random.randint(1,31)), random.choice("abc"), random.randint(1,3)] for _ in range(100)], columns=["date", "cat", "value"])
df.groupby(["cat", pd.Grouper(freq='3d',key='date')]).sum().unstack(0).fillna(0).plot()