【问题标题】:Group By Month and Year in pandas dataframe在熊猫数据框中按月和年分组
【发布时间】:2019-09-21 09:38:07
【问题描述】:

我有以下数据集,包括刷卡和刷卡时间。输出必须是按月和按年刷卡的总数。

Card No Date Time
34235   9/17/2018 5:19
56438   9/17/2018 5:57
634787  9/17/2018 5:58
79749   9/17/2018 5:59
48947   9/17/2018 6:00
3776    9/17/2018 6:07
34235   9/17/2018 6:20
56438   9/17/2018 6:23
634787  9/17/2018 6:29
79749   9/17/2018 6:35
48947   9/17/2018 6:43
3776    9/17/2018 7:05
34235   9/17/2018 7:06
56438   9/20/2018 14:25
634787  9/20/2018 14:25
79749   9/20/2018 14:26
48947   9/20/2018 14:27
3776    9/20/2018 14:28
34235   9/20/2018 14:29
56438   9/20/2018 14:32
634787  9/20/2018 14:34
79749   11/21/2018 7:58
48947   11/21/2018 8:02
3776    11/21/2018 8:02
634787  11/21/2018 8:05
79749   11/21/2018 8:11
48947   11/21/2018 8:13
3776    11/21/2018 8:20
34235   12/4/2018 14:36
56438   12/4/2018 14:37
634787  12/4/2018 14:44
79749   12/4/2018 14:44
48947   12/4/2018 14:52
3776    12/4/2018 14:54

输出

Month/Year Count
Sep/2018 21
Nov/2018 7
Dec/2018 6

我尝试使用 groupby 但无法达到预期的输出。

  df1 = pd.DataFrame(data1, columns= ['Card No','Date Time'])

df2 = df1.groupby([df1['Date Time'].dt.year.rename('year'), df1['Date Time'].dt.month.rename('month')).agg({'count'}) 

如何包含月份名称?

【问题讨论】:

  • SO 并不适合教你如何从 pandas 开始。您实际上是在要求我们对您的任务进行编码。请参考在线熊猫教程,从这里开始学习:https://pandas.pydata.org/pandas-docs/stable/getting_started/tutorials.html
  • 既然您正在寻找提示,请查看dt.strftime 访问器以获取您的Date_Time 列祝您好运!
  • df2 = df1.groupby([df1['Date Time'].dt.year.rename('year'), df1['Date Time'].dt.month.rename('month ')).agg({'count'})
  • @PatrickArtner 我用部分答案编辑了这个问题。我取得了进展。

标签: python pandas dataframe pandas-groupby


【解决方案1】:

既然你做了尝试 - 这就是我会为你的预期输出做的,

df['month_'] = df['Date Time'].dt.strftime('%b')
df['year_'] = df['Date Time'].dt.strftime('%Y')
new_df = df.groupby(["month_", "year_"])["Card_No"].count().reset_index().sort_values(
    "Card_No", ascending=False)
print(new_df)
    month_  year_   Card No
2   Sep 2018    21
1   Nov 2018    7
0   Dec 2018    6

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.dt.strftime.html 了解更多信息。

编辑

要按月份排序,您需要使用某种整数值(尽管有些人可能知道得更好)

    df['month_'] = df['Date Time'].dt.strftime('%m') # change %b to %m
   df['year_'] = df['Date Time'].dt.strftime('%Y')
   new_df = df.groupby(["month_", "year_"])["Card_No"].count().reset_index().sort_values(
    "month_")

【讨论】:

  • 我想按月和年排序。我尝试使用但它没有按预期排序。 new_df = df1.groupby(["month_", "year_"])["Card_No"].count().reset_index().sort_values(["year_","month_"],升序=[False,False])
  • 这很困难,因为它现在是一个对象而不是日期时间对象。不知道如何按月份排序
  • 是的,它按月份名称排序,但理想情况下应该按月份顺序
  • 感谢您的编辑。我对此还有一个问题。如何按月计算平均刷卡次数。平均刷卡次数等于当月的刷卡次数除以该月的天数。
  • 按月还是按月/年? .mean() 方法没有帮助吗?
猜你喜欢
  • 2016-06-24
  • 1970-01-01
  • 2020-05-23
  • 1970-01-01
  • 1970-01-01
  • 2019-08-14
  • 2019-10-14
  • 1970-01-01
  • 2021-08-11
相关资源
最近更新 更多