我在pandas中有两个DataFrame。其中一个每月都有数据,另一个每年都有数据。我需要做一些计算,其中年度值被添加到月度值。
这样的事情:
df1,每月:
2013-01-01 1
2013-02-01 1
...
2014-01-01 1
2014-02-01 1
...
2015-01-01 1
df2,每年:
2013-01-01 1
2014-01-01 2
2015-01-01 3
我想生产这样的东西:
2013-01-01 (1+1) = 2
2013-02-01 (1+1) = 2
...
2014-01-01 (1+2) = 3
2014-02-01 (1+2) = 3
...
2015-01-01 (1+3) = 4
每月数据的值根据年份添加到年度数据的值中(括号中的第一个值是月度数据,第二个值是年度数据)。
答案 0 :(得分:1)
假设你的"月"在Dataframe date
中将列称为df
,然后您可以使用dt
成员获取年份:
pd.to_datetime(df.date).dt.year
将这样的列添加到您的月份DataFrame中,并将其命名为year
。 (有关解释,请参阅this。)
现在对年份DataFrame做同样的事情。
在月份和年份DataFrame上执行merge
,指定how=left
。
在生成的DataFrame中,您将拥有两列。现在只需添加它们。
示例强>
month_df = pd.DataFrame({
'date': ['2013-01-01', '2013-02-01', '2014-02-01'],
'amount': [1, 2, 3]})
year_df = pd.DataFrame({
'date': ['2013-01-01', '2014-02-01', '2015-01-01'],
'amount': [7, 8, 9]})
month_df['year'] = pd.to_datetime(month_df.date).dt.year
year_df['year'] = pd.to_datetime(year_df.date).dt.year
>>> pd.merge(
month_df,
year_df,
left_on='year',
right_on='year',
how='left')
amount_x date_x year amount_y date_y
0 1 2013-01-01 2013 7 2013-01-01
1 2 2013-02-01 2013 7 2013-01-01
2 3 2014-02-01 2014 8 2014-02-01