【问题标题】:Subplot a groupby then Plot by groupbySubplot a groupby 然后 Plot by groupby
【发布时间】:2019-02-22 00:17:41
【问题描述】:

您好,我正在尝试绘制一个分类数据,即描述

data_df = pd.DataFrame({'Date': ['2018-09-14 00:00:22',
                                '2018-09-14 00:01:46',
                                '2018-09-14 00:01:56',
                                '2018-09-14 00:01:57',
                                '2018-09-14 00:01:58',
                                '2018-09-14 00:02:05'],
                        'userID': [33, 33, 33, 20, 20, 20],
                        'device': ['LIGHT', 'LIGHT', 'FAN', 'LIGHT', 'FAN', 'FAN'],
                        'description': ['ON', 'DIM', 'ON', 'ON', 'ON', 'OFF']})

data_df

我想要的是通过对 'device' 进行分组来绘制它们,但在此之前我想按行子绘制 'userID' 以便将它们分开按'userID',每个线图根据'device'名称分组。

我也尝试分组和绘图,但它说我的 描述 不是数字,因为它是分类的。日期为 x 轴,描述为 y 轴。

【问题讨论】:

    标签: python pandas matplotlib


    【解决方案1】:

    看起来您可能正在尝试绘制 userIDdevice 组的 description 随着时间的推移。显然description需要转换为数值变量,所以我冒昧的将ON编码为1,DIM编码为0.5,OFF编码为0。下面的代码应该可以解决你的问题。

    data_df['Date'] = pd.to_datetime(data_df['Date'])
    
    def desc_num(x):
        if x == 'ON':
            return 1
        elif x == 'DIM':
            return 0.5
        else:
            return 0
    
    data_df['desc_num'] = data_df['description'].apply(desc_num)    
    
    ## Creating groups of `userID` and `device`
    groups = data_df.groupby(['userID', 'device'])
    
    for g in groups:
        plt.plot(g[1]['Date'], g[1]['desc_num'])
        plt.xlabel('Time')
        plt.ylabel('description Status')
        plt.title('Time Series of userID: {0}, for device: {1}'.format(g[1]['userID'][0], g[1]['device'][0]))
        plt.show()
        plt.close()
    

    输出(您应该看到每个子组的图):

    【讨论】:

    • 嗯,我需要它们作为字符串,因为它们是分类的。
    • 此外,每个用户 ID 都必须存在设备的所有线图。
    • 你在找什么样的情节?
    • 线图,你看我想检查每个用户这些设备的行为。我需要一个用户中的所有设备来查看是否有类似的行为。原始数据框有更多的设备和描述。
    • 我也猜想每个用户可以按行子图。
    猜你喜欢
    • 2015-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多