在python中分类后按月对数据进行分组

时间:2021-03-15 05:32:13

标签: python pandas

问题陈述:数据由 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

1 个答案:

答案 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}}
相关问题