簡體   English   中英

如何在熊貓中將每日數據與每月數據結合?

[英]How to combine daily data with monthly data in Pandas?

我有每日數據,還有月度數字。 我想通過每月數字對每日數據進行歸一化-例如,2017年的前31天全部除以另一個數據集中與2017年1月相對應的數字。

import pandas as pd
import datetime as dt

N=100
start=dt.datetime(2017,1,1)
df_daily=pd.DataFrame({"a":range(N)}, index=pd.date_range(start, start+dt.timedelta(N-1)))

df_monthly=pd.Series([1, 2, 3], index=pd.PeriodIndex(["2017-1", "2017-2", "2017-3"], freq="M"))

df_daily["a"] / df_monthly # ???

我希望時間序列數據以一對多的方式對齊並執行所需的操作,但是我得到了很多NaN。

您如何在Pandas中正確進行一對多數據對齊?

我可能還希望合並數據,在這種情況下,我希望每月數據在一個月內重復值。

您可以使用to_period('M')提取信息,然后使用map

df_daily["month"] = df_daily.index.to_period('M')
df_daily['a'] / df_daily["month"].map(df_monthly)

無需創建month列,您可以使用

df_daily['a'] / df_daily.index.to_period('M').to_series().map(df_monthly)

您可以從索引的月份創建一個臨時鍵,然后合並鍵上的兩個數據框,即

df_monthly = df_monthly.to_frame().assign(key=df_monthly.index.month)
df_daily = df_daily.assign(key=df_daily.index.month)

df_new = df_daily.merge(df_monthly,how='left').set_index(df_daily.index).drop('key',1)

            a    0
2017-01-01  0  1.0
2017-01-02  1  1.0
2017-01-03  2  1.0
2017-01-04  3  1.0
2017-01-05  4  1.0

對於除法,您可以簡單地執行以下操作:

df_new['b'] = df_new['a'] / df_new[0]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM