我合併dataframes,使加減使用StringIO的複製到數據幀
import pandas as pd
from StringIO import StringIO
# create example data
d1 = '''date v1 v2
2015-01-01 0 20 25
2015-01-01 1 30 35
2015-02-01 0 45 55
2015-02-01 1 22 32'''
d2 = '''date v1
2015-01-01 10
2015-02-01 20'''
df1 = pd.DataFrame.from_csv(StringIO(d1), sep='\s{2,}', parse_dates='date')
df1.index = pd.to_datetime(df1.index, format='%Y-%m-%d %H')
df2 = pd.DataFrame.from_csv(StringIO(d2), sep='\s+', parse_dates='date')
# start
df1['datetime'] = df1.index # to keep index in that column during merging
print '\n--- merge ---\n'
df = pd.merge(df1, df2, left_on=df1.index.date, right_on=df2.index.date)
print df
print '\n--- substract ---\n'
df['v1_x'] = df['v1_x'] - df['v1_y']
df['v2'] = df['v2'] - df['v1_y']
print df
結果
--- merge ---
key_0 v1_x v2 datetime v1_y
0 2015-01-01 20 25 2015-01-01 00:00:00 10
1 2015-01-01 30 35 2015-01-01 01:00:00 10
2 2015-02-01 45 55 2015-02-01 00:00:00 20
3 2015-02-01 22 32 2015-02-01 01:00:00 20
--- substract ---
key_0 v1_x v2 datetime v1_y
0 2015-01-01 10 15 2015-01-01 00:00:00 10
1 2015-01-01 20 25 2015-01-01 01:00:00 10
2 2015-02-01 25 35 2015-02-01 00:00:00 20
3 2015-02-01 2 12 2015-02-01 01:00:00 20
+1 – ZJS