问题陈述:数据由 csv 中的两列组成 - 日期和产品 数据:
Date Prod
1/2/2018 7:43:00 PM A
1/1/2018 11:41:00 AM B
1/1/2018 7:57:00 AM C
1/2/2018 1:56:00 PM A
1/5/2018 3:29:00 AM A
1/3/2018 7:23:00 AM C
1/3/2018 1:26:00 PM B
1/5/2018 2:08:00 AM A
1/5/2018 3:47:00 PM B
我需要返回一个以产品为键的json数据,值应该是每月产品的频率
喜欢:
[{"A":{"Jan":"3","Feb":"3","Mar":"5",...},{"B":{"Jan":"5","Feb":"7","Mar":"4",...},{"C":{...}}]
我试过了:
monthly_series = df.groupby(pd.Grouper(key='DATE', freq='m'))['DATE'].count()
monthly_series.index = monthly_series.index.month
monthly_series.plot(kind='bar')
return monthly_series
答案 0 :(得分:0)
使用 groupby
by Prod
和月份与 Series.dt.strftime
和 %b
用于 MultiIndex Series
月份的前 3 个字母,然后将其转换为 {{ 1}}:
dict comprehension
如果需要json:
df['Date'] = pd.to_datetime(df['Date'], dayfirst=True)
monthly_series=df.groupby(['Prod',df['Date'].dt.strftime('%b')],sort=False)['Date'].count()
d = {level: monthly_series.xs(level).to_dict() for level in monthly_series.index.levels[0]}
print (d)
{'A': {'Feb': 2, 'May': 2}, 'B': {'Jan': 1, 'Mar': 1, 'May': 1}, 'C': {'Jan': 1, 'Mar': 1}}