2016-09-27 3 views
0

私はこのようになりますデータフレームがあります。はどのようにヘッダーとして2行分のpd.melt使用する

DATETIME    | TAGNAME1   | TAGNAME2 

0 DESCRIPTION   | TAG_DESCRIPTION | TAG2_DESCRIPTION 

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

は私がPDを使用していくつかの例を見た結果

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(df, id_vars=['DATETIME'], var_name=['TagName'], value_name='Value') 

次走った。しかし、私は新しい列として説明をしないのです溶融

私は必要なものを達成するための方法はありますか?事前

答えて

1

おかげで、行によってデータフレームをスライスして、最終的なマージと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 
関連する問題