在python中将列转换为行[重复]

Posted

技术标签:

【中文标题】在python中将列转换为行[重复]【英文标题】:converting columns to rows in paython [duplicate] 【发布时间】:2021-10-23 03:34:08 【问题描述】:

我有一个这样的数据框,

df1=
        time   asset_id sensor_01   sensor_02
0   2019-08-01  120         23        54
1   2019-08-02  125         45        38
2   2019-08-03  120         25        49

由于传感器的数量是可变的,我决定将它们写成行,例如,

df2=
      time  asset_id    sensor_ID   sensor_value
0   2019-08-01  120     sensor_01      23
1   2019-08-02  125     sensor_01      45
2   2019-08-03  120     sensor_01      25
3   2019-08-01  120     sensor_02      54
4   2019-08-02  125     sensor_02      38
5   2019-08-03  120     sensor_02      49

我想知道是否有任何方便的方法可以将 df1 转换为 df2?

附录: df1 代码为方便起见,

import pandas as pd
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)

【问题讨论】:

【参考方案1】:

使用pandas.melt:

pd.melt(df1,
        id_vars=['time', 'asset_id'], # variables to keep as columns
        var_name='sensor_ID',         # column name for the variable
        value_name='sensor_value'     # column name for the values
       )

输出:

         time asset_id  sensor_ID  sensor_value
0  2019-08-01      120  sensor_01            23
1  2019-08-02      125  sensor_01            45
2  2019-08-03      120  sensor_01            25
3  2019-08-01      120  sensor_02            54
4  2019-08-02      125  sensor_02            38
5  2019-08-03      120  sensor_02            49

【讨论】:

【参考方案2】:
pd.melt(df, id_vars=['time', 'asset_id'], value_vars=['sensor_01', 'sensor_02'], var_name='sensor_ID', value_name='sensor_value')

【讨论】:

以上是关于在python中将列转换为行[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在sql server中将列转换为行

在 Oracle 11g 中将列转换为行

如何在pyspark中将列转换为行?

熊猫将列转换为行[重复]

在 ORACLE SQL 中将一组列转换为行

在SQL中将列转换为行