如何将pd.melt用作两行作为标题

时间:2016-09-27 00:20:50

标签: python pandas

我有一个如下所示的数据框:

   DATETIME              |  TAGNAME1          |  TAGNAME2

0  DESCRIPTION           |  TAG_DESCRIPTION   | TAG2_DESCRIPTION

1  01/01/2015 00:00:00   |  100               | 200

我需要有以下结果

   DATETIME             | TAGNAME   |  DESCRIPTION       | VALUE

0  01/01/2015 00:00:00  | TAGNAME1  | TAG1_DESCRIPTION   | 100

1  01/01/2015 00:00:00  | TAGNAME2  | TAG2_DESCRIPTION   | 200

我看到了一些使用pd.melt的例子,所以我运行了以下命令

pd.melt(df, id_vars=['DATETIME'], var_name=['TagName'], value_name='Value')

但我错过了描述作为新专栏

有没有办法达到我的需要?

提前致谢

1 个答案:

答案 0 :(得分:2)

考虑按行切割数据帧并运行最终合并的两个融合:

from io import StringIO
import pandas as pd

data = '''DATETIME|TAGNAME1|TAGNAME2
DESCRIPTION|TAG_DESCRIPTION|TAG2_DESCRIPTION
1/01/2015 00:00:00|100|200'''

df = pd.read_table(StringIO(data), sep="|")
#              DATETIME         TAGNAME1          TAGNAME2
# 0         DESCRIPTION  TAG_DESCRIPTION  TAG2_DESCRIPTION
# 1  1/01/2015 00:00:00              100               200

df1 = df[0:1]        # FIRST ROW
df2 = df[1:len(df)]  # SECOND TO LAST ROW

mdf = pd.merge(pd.melt(df1, id_vars=['DATETIME'], var_name='TAGNAME',
                       value_name='DESCRIPTION')[['TAGNAME', 'DESCRIPTION']],
               pd.melt(df2, id_vars=['DATETIME'], var_name='TAGNAME',
                       value_name='VALUE'),
               on=['TAGNAME'])

mdf = mdf[['DATETIME', 'TAGNAME', 'DESCRIPTION', 'VALUE']]
#              DATETIME   TAGNAME       DESCRIPTION VALUE
# 0  1/01/2015 00:00:00  TAGNAME1   TAG_DESCRIPTION   100
# 1  1/01/2015 00:00:00  TAGNAME2  TAG2_DESCRIPTION   200