重采样(上采样)Pandas 多索引数据帧
Resampling (Upsample) Pandas multiindex dataframe
这里有一个示例数据框供参考:
import pandas as pd
import datetime
import numpy as np
np.random.seed(1234)
arrays = [np.sort([datetime.date(2016, 8, 31), datetime.date(2016, 7, 31), datetime.date(2016, 6, 30)]*3),
['A', 'B', 'C', 'D', 'E']*5]
df = pd.DataFrame(np.random.randn(15, 4), index=arrays)
df.index.rename(['date', 'id'], inplace=True)
外观:
我想通过上采样将多重索引的 date
级别重新采样为每周频率 W-FRI
,即从最近的值 how='last'
复制。我见过的示例通常在使用 pd.Grouper
函数后最终聚合数据(我想避免)。
编辑:我在下面找到了解决方案,但我想知道是否有更有效的方法。
编辑:我找到了解决方案:
df.unstack().resample('W-FRI', how='last', fill_method='ffill')
但我想知道是否有更有效的方法来做到这一点。
在当前 pandas 版本 0.23.3 中,您的方法将导致警告:
FutureWarning: fill_method is deprecated to .resample()
the new syntax is .resample(...).last().ffill()
这不会引起警告:
df.unstack(level=1).resample('W-FRI').pad()
最好明确说明拆栈级别(在你的情况下是级别 1 或 -1)IMO
这里有一个示例数据框供参考:
import pandas as pd
import datetime
import numpy as np
np.random.seed(1234)
arrays = [np.sort([datetime.date(2016, 8, 31), datetime.date(2016, 7, 31), datetime.date(2016, 6, 30)]*3),
['A', 'B', 'C', 'D', 'E']*5]
df = pd.DataFrame(np.random.randn(15, 4), index=arrays)
df.index.rename(['date', 'id'], inplace=True)
外观:
我想通过上采样将多重索引的 date
级别重新采样为每周频率 W-FRI
,即从最近的值 how='last'
复制。我见过的示例通常在使用 pd.Grouper
函数后最终聚合数据(我想避免)。
编辑:我在下面找到了解决方案,但我想知道是否有更有效的方法。
编辑:我找到了解决方案:
df.unstack().resample('W-FRI', how='last', fill_method='ffill')
但我想知道是否有更有效的方法来做到这一点。
在当前 pandas 版本 0.23.3 中,您的方法将导致警告:
FutureWarning: fill_method is deprecated to .resample()
the new syntax is .resample(...).last().ffill()
这不会引起警告:
df.unstack(level=1).resample('W-FRI').pad()
最好明确说明拆栈级别(在你的情况下是级别 1 或 -1)IMO