2016-12-17 7 views
-1

実際の.CSVデータファイル。Pythonで複数の日付列と列値を連結する

Date MTM_B7_1 Date MTM_B7_11 Date MTM_B7_12 
03/01/11 AM 2084 04/01/11 AM -8166 04/01/11 AM -8332 
04/01/11 AM -9066 05/01/11 AM 28613 05/01/11 AM -8750 
05/01/11 AM 103607 06/01/11 AM 35605 06/01/11 AM -21307 
10/01/11 AM 68538 07/01/11 AM 55608 07/01/11 AM 151609 

再現可能な例:私は上記の形式で.csvファイルを持っている

df = pd.DataFrame({'Date': pd.date_range('01/03/11',periods=8, format=' %d/%m/%y %p'), 
        'MTM1': [2, 3, 4, 5, 6, 7, 8, 9], 
        'Date1': pd.date_range('01/07/11',periods=8, format=' %d/%m/%y %p'), 
        'MTM2': [4, 3, 5, -7, 6, -9, 8, 9] 
        }) 

、私はすべての日付の列を連結し、それぞれの日付ごとにMTMの列の値を保持したいです索引を作成し、残りの日付列を取り出して、すべてのMTMに対して1つの日付索引を作成します。

答えて

1

は、データフレームのリストに日付/ MTM対により分割データフレームを検討して、外側がreduce()と合流合併チェーン:

from functools import reduce 
import pandas as pd 

df = pd.DataFrame({'Date': pd.date_range('01/03/11',periods=8, format=' %d/%m/%y'), 
        'MTM1': [2, 3, 4, 5, 6, 7, 8, 9], 
        'Date1': pd.date_range('01/07/11',periods=8, format=' %d/%m/%y'), 
        'MTM2': [4, 3, 5, -7, 6, -9, 8, 9] 
        }) 

# FOR POSTED TWO PAIRING DATA 
dfList = [df[['Date', 'MTM1']], 
      df[['Date1','MTM2']].rename(columns={'Date1':'Date'})] 

# FOR MANY PAIRINGS (ASSUMING ORDER AND MATCHES INTACT) 
dfList = [df[[d, m]].rename(columns={d:'Date'})\ 
         for d, m in zip([c for c in df.columns if 'Date' in c], 
             [c for c in df.columns if 'MTM' in c])] 

df = reduce(lambda left, right: pd.merge(left, right, on=['Date'], how='outer'), dfList).set_index('Date') 
print(df) 

#    MTM1 MTM2 
# Date     
# 2011-01-03 2.0 NaN 
# 2011-01-04 3.0 NaN 
# 2011-01-05 4.0 NaN 
# 2011-01-06 5.0 NaN 
# 2011-01-07 6.0 4.0 
# 2011-01-08 7.0 3.0 
# 2011-01-09 8.0 5.0 
# 2011-01-10 9.0 -7.0 
# 2011-01-11 NaN 6.0 
# 2011-01-12 NaN -9.0 
# 2011-01-13 NaN 8.0 
# 2011-01-14 NaN 9.0 
+0

こんにちは同様手がかりのおかげで、実際に私はDFのリストを読み、その後、実行していましたリストを追加した後の連結(必要ではない)は、それ自体をマージすることによってあなたが示唆したように。 –

+0

ソリューションがうまくいっているのを聞いて嬉しいです!お手伝いをされた場合は、チェックマークを付けて解決を確認してください。 – Parfait

+0

あなたの努力のためにこんにちは、ありがとう、ここで私はこれらのペアの長さが可変であることをもう一度言及することを忘れていたので、ここでは可変長でペアの数が多いので、マージしているだけでなく、最後に一致する日付。 –

関連する問題