2016-09-30 13 views
2

pandasを使用して1つにマージしようとしている2つのExcelファイルがあります。最初のファイルは、指定された時間と日の加入者数を持つ時間と日付のリストです。 2番目のファイルには、毎時の気象情報が格納されています。私は両方のファイルをインポートしたデータは次のようになります。特定の時刻にのみ2つのデータフレームをマージする

df1= 

Date     Count 
2010-01-02 09:00:00 15 
2010-01-02 10:00:00 8 
2010-01-02 11:00:00 9 
2010-01-02 12:00:00 11 
2010-01-02 13:00:00 8 
2010-01-02 14:00:00 10 
2010-01-02 15:00:00 8 
2010-01-02 16:00:00 6 
... 

df2 = 

Date     Temp Rel_Hum Pressure Weather 
2010-01-00 09:00:00 -5  93  100.36 Snow,Fog 
2010-01-01 10:00:00 -5  93  100.36 Snow,Fog 
2010-01-02 11:00:00 -6.5 91  100  Snow,Fog 
2010-01-03 12:00:00 -7  87  89  Snow,Fog 
2010-01-04 13:00:00 -7  87  89  Snow,Fog 
2010-01-05 14:00:00 -6.7 88  89  Snow,Fog 
2010-01-06 15:00:00 -6.5 89  89  Snow,Fog 
2010-01-07 16:00:00 -6  88  90  Snow,Fog 
2010-01-08 17:00:00 -6  89  89  Snow,Fog 
... 

は私だけdf1に指定されている時間のための情報を乗り切るする必要がありますが、df2は、その月の毎日のための24時間の期間の天気情報が含まれています。私は私が書いたコードをテストするために管理してきました

Date     Count Temp Rel_Hum Pressure Weather 
2010-01-02 09:00:00 15 0  0  0   0 
2010-01-02 10:00:00 8  0  0  0   0 
2010-01-02 11:00:00 9  0  0  0   0 
2010-01-02 12:00:00 11 0  0  0   0 
2010-01-02 13:00:00 8  0  0  0   0 
2010-01-02 14:00:00 10 0  0  0   0 
2010-01-02 15:00:00 8  0  0  0   0 
2010-01-02 16:00:00 6  0  0  0   0 
... 

df1のみ2列が含まれてい

ので、それは似ているように、私はTempRel_HumPressureWeather列を持つようにdf1を変更しました私が遭遇している問題は、タスクを完了するのにかなりの時間を要しているということです。私はdf2df1に合わせ取得するreindexの組み合わせを使用し

この程度
import pandas as pd 
import numpy as np 
from datetime import datetime 

location = '/home/lukasz/Documents/BUS/HOURLY_DATA.xlsx' 
location2 = '/home/lukasz/Documents/BUS/Weather Data/2010-01.xlsx' 

df1 = pd.read_excel(location) 
df2 = pd.read_excel(location2) 

df.Temp = df.Temp.astype(float) 
df.Rel_Hum = df.Rel_Hum.astype(float) 
df.Pressure = df.Pressure.astype(float) 
df.Weather = df.Weather.astype(str) 

n = len(df2) - len(df) 

for i in range(len(df)): 
    print(df['Date'][i]) 
    for j in range(i, i+n): 
     date_object = datetime.strptime(df2['Date/Time'][j], '%Y-%m-%d %H:%M') # The date column in df2 is a str 
     if df['Date'][i] == date_object: 
      df.set_value(i, 'Temp', df2['Temp'][j]) 
      df.set_value(i, 'Dew_Point_Temp', df2['Dew_Point_Temp'][j]) 
      df.set_value(i, 'Rel_Hum', df2['Rel_Hum'][j]) 
      df.set_value(i, 'Pressure', df2['Pressure'][j]) 
      df.set_value(i, 'Weather', df2['Weather'][j]) 

# print(df[:5]) 

df.to_excel(location, index=False) 
+1

を使用しています。詳細については、http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.merge.htmlを参照してください。 – TrigonaMinima

答えて

1

に行くのより高速な方法があったかどうかを知りたかったです。天気情報を転送するには、パラメータmethod='ffill'を必ず入力してください。

次にあなたが `` `` `DF1 = df1.merge(= "左" どのように= "日" にDF2、、)`のような何かを行うことができますjoin

df1.join(df2.set_index('Date').reindex(df1.Date, method='ffill'), on='Date') 

enter image description here

関連する問題