python - 熊猫,转换具有相同日期时间索引值的行
问题描述
目前我正在使用几百万行和 8 列的数据框,并试图避免在对这个 df 进行转换时使用循环。
问题如下。
原始 Pandas DataFrame 的示例格式如下所示。这里的“索引”是日期时间,“房间”是分类的,其他列是浮点数。
原始df:
这是一个数据框中的传感器数据,每个日期时间索引值有多个样本,因为有多个房间。目标列应采用以下格式。
请注意,我省略了“厨房和客厅”的列。你可能会达到目标。每个变量,每个房间标签一列。
现在,让事情变得更复杂。在每个时间步长中,并非所有可能的房间类别都是可见的。例如,在 20:05,示例 df 中可能缺少“厨房”。
可以将这种转换(我猜)视为多个数据帧(每个房间一个 df),它们连接到同一个日期时间索引上,其中每个列名称更改为sensor__room_category
. 这种转换可以在不使用循环和迭代整个 df 的情况下完成吗?如果是这样,怎么做?
另一件事,实际上这个df由来自多个房屋的上述数据组成。所以有一列带有“house_1,house_2,house_3,...”标签。因此,仅应转换例如 house_1 的日期,然后是 house_2 等...所以每个房子的数据保持分离。
我知道这是一个非常具体的问题。但我想知道是否有一些 Pandas 甚至 np 魔法可以轻松实现。
TLDR:来自不同房间传感器的数据需要转换,因此每个值都有一个时间戳sensor__room_category
。如何在没有大量循环的情况下做到这一点?
解决方案
这是一个例子
让我们假设这个以日期时间和房屋为索引的多索引数据框:
co2 humidity presence room
index house
22/11/2018 20:00 house1 102 60 0 bedroom1
house1 104 62 0 bedroom2
house1 122 71 1 kitchen
house1 115 61 1 living room
22/11/2018 20:05 house1 103 64 0 bedroom1
house1 104 68 0 bedroom2
house1 123 72 1 kitchen
house1 111 63 1 livingroom
22/11/2018 20:00 House2 102 60 0 bedroom1
House2 104 62 0 bedroom2
House2 122 71 1 kitchen
House2 115 61 1 living room
22/11/2018 20:05 House2 103 64 0 bedroom1
House2 104 68 0 bedroom2
House2 123 72 1 kitchen
House2 111 63 1 livingroom
你可以简单地做df.pivot(columns='room')
:
co2 humidity presence
room bedroom1 bedroom2 kitchen living room bedroom1 bedroom2 kitchen living room bedroom1 bedroom2 kitchen living room
index house
22/11/2018 20:00 House2 102 104 122 115 60 62 71 61 0 0 1 1
house1 102 104 122 115 60 62 71 61 0 0 1 1
22/11/2018 20:05 House2 103 104 123 111 64 68 72 63 0 0 1 1
house1 103 104 123 111 64 68 72 63 0 0 1 1
推荐阅读
- powershell - Azure 发布管道:从 PowerShell 任务启动应用程序并使其在多个阶段运行
- python - 遍历列表后摆脱结果中的额外字符串
- java - 如何在 Android Studio 中显示高分辨率的图像?
- sql - 选择具有分组依据和条件的查询
- r - 查找患者 ID 至少出现两次以上
- key - 在 pkcs11 hsm 中生成 RSA 密钥
- python - matplotlib 中以空格作为千位分隔符的科学刻度数
- python - 如果只给出一个参数,则不同的 argparse 规则
- php - 我无法在 EC2 中启动 php 服务器
- python - aws s3上传的视频文件无法播放,自动下载