我有一个如下所示的数据框:
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')
但我错过了描述作为新专栏
有没有办法达到我的需要?
提前致谢
答案 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