将熊猫数据框格式更改为另一种格式?

Posted

技术标签:

【中文标题】将熊猫数据框格式更改为另一种格式?【英文标题】:Changing a pandas dataframe format into another format? 【发布时间】:2022-01-16 05:00:39 【问题描述】:

给定的数据框如下所示:

                     sensorA  sensorB  deviceA  deviceB  inputA  inputB  machineA  machineB  flagA  flagB  mainA
Time                                                                                                            
2021-11-26 20:20:00    379.0      0.0      0.0    489.0    0.77    35.0       0.0      51.0  -13.0  230.0    1.6
2021-11-26 20:30:00    344.0      0.0      0.0    143.0    0.76    31.0       0.0      50.0  -11.0  230.0    1.8

我想将其映射为以下格式,将各个列分隔为字段和属性的组合。

Time Type attribute Value
2021-11-26 20:20:00 sensor a 999

我已经尝试了多个方向来使用多索引、groupby 等来解决这个问题,但似乎无法解决如何准确地实现这一点?

任何帮助将不胜感激!

【问题讨论】:

你的列名和你的真实案例一样吗?列以 A 或 B,或 C,...结尾? source_type?你的意思是type_tag?我可以安全地使用_ 作为分隔符吗? 【参考方案1】:

编辑

如果您的列名包含'_' 作为分隔符,您可以使用:

df.columns = df.columns.str.split('_', expand=True).rename(['Type', 'Tag'])
out = df.unstack().rename('Value').reset_index(level=['Type', 'Tag']).sort_index()

使用正则表达式从列名中提取类型/标签:

types = ['sensor', 'device', 'input', 'machine', 'flag', 'main']
pat = fr"('|'.join(types))(.*)"

df.columns = pd.MultiIndex.from_frame(df.columns.str.extract(pat), 
                                      names=['Type', 'Tag'])
out = df.unstack().rename('Value').reset_index(level=['Type', 'Tag']).sort_index()

输出:

>>> out
                        Type Tag   Value
Time                                    
2021-11-26 20:20:00   sensor   A  379.00
2021-11-26 20:20:00     flag   B  230.00
2021-11-26 20:20:00     flag   A  -13.00
2021-11-26 20:20:00  machine   B   51.00
2021-11-26 20:20:00  machine   A    0.00
2021-11-26 20:20:00     main   A    1.60
2021-11-26 20:20:00    input   A    0.77
2021-11-26 20:20:00    input   B   35.00
2021-11-26 20:20:00   device   B  489.00
2021-11-26 20:20:00   device   A    0.00
2021-11-26 20:20:00   sensor   B    0.00
2021-11-26 20:30:00    input   A    0.76
2021-11-26 20:30:00   device   A    0.00
2021-11-26 20:30:00    input   B   31.00
2021-11-26 20:30:00  machine   A    0.00
2021-11-26 20:30:00   sensor   B    0.00
2021-11-26 20:30:00  machine   B   50.00
2021-11-26 20:30:00     flag   A  -11.00
2021-11-26 20:30:00   sensor   A  344.00
2021-11-26 20:30:00     flag   B  230.00
2021-11-26 20:30:00   device   B  143.00
2021-11-26 20:30:00     main   A    1.80

【讨论】:

好的,这真是太糟糕了,我想我可以从中工作。非常感谢您的帮助和指导,真的很感激。

以上是关于将熊猫数据框格式更改为另一种格式?的主要内容,如果未能解决你的问题,请参考以下文章

将熊猫数据框中的多列更改为日期时间

熊猫数据框到 json 列表格式

熊猫通过根据另一列的值添加列级别来重塑数据框[重复]

将数据框日期列的 dd-mm-yyyy 日期格式更改为 yyyy-mm-dd [重复]

熊猫:将系列的数据类型更改为字符串

将熊猫数据框转换为具有以下格式的excel