Группа Python по месяцам и годам - PullRequest
0 голосов
/ 21 сентября 2019

У меня есть нижеприведенный набор данных, состоящий из считывания карт и времени, когда был проведен.Вывод должен быть полным без количества карт, проведенных за месяц и год.

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'}) 

Как мне включить название месяца. Я не могу понять это.

1 Ответ

1 голос
/ 21 сентября 2019

Поскольку вы предприняли попытку - это то, как я бы сделал это для ожидаемого результата,

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_")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...