python - Subplot a groupby 然后 Plot by groupby
问题描述
嗨,我正在尝试绘制一个分类数据,即描述:
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
我想要的是通过对“设备”分组来绘制它们,但在此之前我想按行对“用户ID”进行子图,以便它们分别由“用户ID”分隔,并且每个线图都根据“设备”名称进行分组.
我也尝试过分组和绘图,但它说我的描述不是数字的,因为它是分类的。日期为 x 轴,描述为 y 轴。
解决方案
看起来您可能正在尝试随着时间的推移绘制description
ofuserID
和组。device
显然,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()
输出(您应该看到每个子组的图):
推荐阅读
- python - 使用带有两个参数的函数从两个现有列创建两个新列
- php - 覆盖postgresql表php中的数据
- windows - 在 Windows 上安装 secp256k1 库时出错
- mysql - 一个复合索引或多个外键索引?
- drools - Drools:为什么 indexOf() 在 LHS 中不起作用?
- mysql - Yii2 MySQL如何防止重复选择查询
- sql - 如何提高运行 SQL Server 数据库的 django 站点的数据库查询性能?
- java - Jackson 总是序列化完整对象或总是序列化 id
- java - sybase java DB连接问题
- php - 防止 HTML 输出到 STDOUT - Google App Engine 开发环境