Python Pandas - 按类别分组,然后按类别绘制

非常简单的熊猫问题,我是初学者。


我有一个数据框'df'(例如):


import pandas as pd

df = pd.DataFrame({'time': ['2019-04-23 10:21:00', '2019-04-23 11:14:00', '2019-04-24 11:30'], 

                   'category': ['A', 'B', 'A'],

                   'text': ['njrnfrjn','fmrjfmrfmr','mjrnfjrnmi']})

我只想:


按类别和日期分组(每天)

按类别和日期统计短信数量

绘制跨天的所有时间序列(同一图中的每个类别一个时间序列)


慕的地6264312
浏览 106回答 1
1回答

慕桂英3389331

您可以尝试以下方法:df.groupby([df.time.dt.floor('d'), "category"]).size().unstack().plot()说明:第一步是像你提到的那样发牢骚。为此,我们使用groupby在 中groupby,因为我们需要times按天分组,所以一种解决方案是dt.floor在time列上使用。我们传递 的论点"d"。days此外,为确保floor可访问,该time列必须是time series. 如果不是,请使用pd.to_datetime将其转换为pd.to_datetime(df.time).现在我们有了组,可以使用该方法轻松计算大小size。下一步是将category列(在此步骤中作为索引)转换为列。因为我们按两个键分组,所以我们可以使用unstack.最后,将其plot称为数据框。由于数据框结构良好,因此无需任何参数即可工作(每列绘制一条线,索引列 ( time) 用作x-axis。完整代码+插图:# import modules import pandas as pdimport matplotlib.pyplot as plt# (here random is just for creating dummy data)from random import randint, choice# Create dummy datasize = 1000df = pd.DataFrame({    'time': pd.to_datetime(["2020/01/{} {}:{}".format(randint(1, 31), randint(0,23), randint(0,59)) for _ in range(size)]),    'text': ['blablabla...' for _ in range(size)],    'category': [choice(["A", "B", "C"]) for _ in range(size)]})print(df)#                    time          text category# 0   2020-01-30 23:15:00  blablabla...        C# 1   2020-01-16 07:06:00  blablabla...        A# 2   2020-01-03 18:47:00  blablabla...        A# 3   2020-01-21 15:45:00  blablabla...        A# 4   2020-01-10 04:11:00  blablabla...        C# ..                  ...           ...      ...# 995 2020-01-12 03:03:00  blablabla...        C# 996 2020-01-08 10:35:00  blablabla...        B# 997 2020-01-24 20:51:00  blablabla...        C# 998 2020-01-05 07:39:00  blablabla...        A# 999 2020-01-26 16:54:00  blablabla...        A# See size resultprint(df.groupby([df.time.dt.floor('d'), "category"]).size())# time        category# 2020-01-01  A            6#             B           18#             C            7# 2020-01-02  A           10#             B            8#                         ..# 2020-01-30  B           16#             C           11# 2020-01-31  A           14#             B           17#             C           11# See unstack resultprint(df.groupby([df.time.dt.floor('d'), "category"]).size().unstack())# category     A   B   C# time# 2020-01-01   6  18   7# 2020-01-02  10   8  13# 2020-01-03  11  11  16# 2020-01-04   9   5  10# 2020-01-05  13   9  13# 2020-01-06  11  11  12# 2020-01-07  13   7   9# 2020-01-08   5  16  13# 2020-01-09  15   6  14# 2020-01-10  10  11   9# 2020-01-11   7  16  13# 2020-01-12  12  13  13# 2020-01-13  12   5   7# 2020-01-14  11  10  11# 2020-01-15  13  14  11# 2020-01-16   9   8  13# 2020-01-17   8   9   6# 2020-01-18  12   5  11# 2020-01-19   7   8  13# 2020-01-20  12   9   9# 2020-01-21   9  13  13# 2020-01-22  14  11  19# 2020-01-23  14   6  12# 2020-01-24   7   8   6# 2020-01-25  10  12  10# 2020-01-26   8  12   7# 2020-01-27  18  11   7# 2020-01-28  15  10   9# 2020-01-29  12   7  11# 2020-01-30  12  16  11# 2020-01-31  14  17  11# Perform plotdf.groupby([df.time.dt.floor('d'), "category"]).size().unstack().plot()plt.show()输出:
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python