我有一个数据框,看起来像:
sensorId 1 2 3
9b:f3:55:19:00:4b:12:00 1 7 8
bf:f3:55:19:00:4b:12:00 6 5 9
da:f3:55:19:00:4b:12:00 1 1 2
Run Code Online (Sandbox Code Playgroud)
我想用以下结构重构为数据框:
sensorId y
9b:f3:55:19:00:4b:12:00 1
9b:f3:55:19:00:4b:12:00 7
9b:f3:55:19:00:4b:12:00 8
bf:f3:55:19:00:4b:12:00 6
bf:f3:55:19:00:4b:12:00 5
bf:f3:55:19:00:4b:12:00 9
da:f3:55:19:00:4b:12:00 1
da:f3:55:19:00:4b:12:00 1
da:f3:55:19:00:4b:12:00 2
Run Code Online (Sandbox Code Playgroud)
我尝试使用df.stack(),但结果并不令人满意,因为它返回了pd.series:
9b:f3:55:19:00:4b:12:00 1 1
2 7
3 8
bf:f3:55:19:00:4b:12:00 1 6
2 5
3 9
da:f3:55:19:00:4b:12:00 1 1
2 1
3 2
Run Code Online (Sandbox Code Playgroud)
使用double Series.reset_index-first删除的第二级,MultiIndex然后使用第二转换Series为DataFrame:
df = df.stack().reset_index(level=1, drop=True).reset_index(name='y')
print (df)
sensorId y
0 9b:f3:55:19:00:4b:12:00 1
1 9b:f3:55:19:00:4b:12:00 7
2 9b:f3:55:19:00:4b:12:00 8
3 bf:f3:55:19:00:4b:12:00 6
4 bf:f3:55:19:00:4b:12:00 5
5 bf:f3:55:19:00:4b:12:00 9
6 da:f3:55:19:00:4b:12:00 1
7 da:f3:55:19:00:4b:12:00 1
8 da:f3:55:19:00:4b:12:00 2
Run Code Online (Sandbox Code Playgroud)
编辑:
因为df.stackreturn MultiIndex,它的意思sensorId不是列,而是索引。
如果sensorId是列:
df = df.set_index('sensorId').stack().reset_index(level=1, drop=True).reset_index(name='y')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
44 次 |
| 最近记录: |