Python中使用pandas实现DataFrame传感器列转行的便捷方法咨询
pandas宽表转长表解决方案
你可以直接用pandas内置的melt函数实现转换,这个方案天然支持传感器数量可变的场景,新增传感器列不需要修改代码逻辑:
完整可运行代码
import pandas as pd # 生成测试用df1 dictionary = {'time': ['2019-08-01', '2019-08-02', '2019-08-03'], 'asset_id': ['120', '125', '120'], 'sensor_01': [23, 45, 25], 'sensor_02': [54, 38, 49] } df1 = pd.DataFrame(dictionary) # 核心转换代码 df2 = df1.melt( id_vars=['time', 'asset_id'], # 指定不需要展开的主键列 var_name='sensor_ID', # 原传感器列名存储到该列 value_name='sensor_value' # 原传感器数值存储到该列 )
鲁棒性优化写法
如果表中存在其他非主键、非传感器的字段,可自动识别所有sensor_开头的列做转换:
# 自动匹配所有传感器列,新增sensor_xx列无需修改代码 sensor_cols = [col for col in df1.columns if col.startswith('sensor_')] df2 = df1.melt( id_vars=['time', 'asset_id'], value_vars=sensor_cols, var_name='sensor_ID', value_name='sensor_value' )
转换得到的df2和你给出的预期输出完全一致。
内容的提问来源于stack exchange,提问作者Phoenix
相关产品推荐
相关产品推荐

