1980-01-01から2018-02-28(1日ずつ増加)のインデックスと1つのデータ列(毎日の株価など)を持つcsvファイル(たとえばA.csv)があります。
1980-01から2018-02までのインデックス(1か月増加)と1つのデータ列(毎月の貿易収支など)を持つ別のcsvファイル(たとえばB.csv)があります。
このような場合、(毎日のインデックスを維持することにより)B.csvをA.csvにマージするにはどうすればよいですか?つまり、日次インデックス+日次株価の1つの列+月次貿易収支の別の列(月の各日で同じ貿易収支値を維持することにより、月次貿易収支を日次貿易収支に拡張する必要があります)。
これはで行うことができますpandas
。
これを行う1つの方法は、両方の日付列をdatetime
オブジェクトに変換し、を使用pd.Series.map
して1つのテーブルから別のテーブルへのマッピングを実行することです。
月次データには日が指定されていないため、マッピングでは月の最初の日に正規化します。
import pandas as pd
# first read in the 2 tables into dataframes
# df_daily = pd.read_csv('daily.csv')
# df_monthly = pd.read_csv('monthly.csv')
df_daily = pd.DataFrame({'Date': ['1980-01-01', '1980-01-02', '1980-01-03'],
'Value': [1, 2, 3]})
df_monthly = pd.DataFrame({'Month': ['1979-12', '1980-01', '1980-03'],
'Value': [100, 200, 300]})
# convert to datetime objects
df_daily['Date'] = pd.to_datetime(df_daily['Date'])
df_monthly['Month'] = pd.to_datetime(df_monthly['Month']+'-01')
# perform mapping after normalising to first day of month
df_daily['MonthValue'] = df_daily['Date'].map(lambda x: x.replace(day=1))\
.map(df_monthly.set_index('Month')['Value'])
# Date Value MonthValue
# 0 1980-01-01 1 200
# 1 1980-01-02 2 200
# 2 1980-01-03 3 200
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加