如何在Pandas

时间:2016-01-27 15:01:09

标签: pandas

我在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

每月数据的值根据年份添加到年度数据的值中(括号中的第一个值是月度数据,第二个值是年度数据)。

1 个答案:

答案 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