Pandas 中的 Groupby 和插值

2023-12-30

我的数据包含周数、帐户 ID 和几个使用情况列。我想 a) 按帐户 ID 分组,b) 将每周数据重新采样为每日数据,c) 均匀插值每日数据(将每周数据除以 7),然后将其全部重新组合在一起。我已经记下了大部分,但是 Pandasgroupby让我有点困惑。它也非常慢,这让我认为这可能不是最佳解决方案。

数据如下:

    Account Id  year week         views stats foo_col 
31133   213     2017-03-05          4.0     2.0     11.0
10085   456     2017-03-12          1.0     6.0     3.0
49551   789     2017-03-26          1.0     6.0     27.0

这是我的代码:

def interpolator(mini_df):
    mini_df = mini_df[cols_to_interpolate].set_index('year week')
    return mini_df.resample('D').ffill().interpolate() / 7

example = list(grp)[0][1]
interpolator(example) # This works perfectly

df.groupby('Account Id').agg(interpolator)                # doesn't work
df.groupby('Account Id').transform(interpolator)          # doesn't work

for name,group in grp:
    group = group[cols_to_interpolate].set_index('year week')
    group = group.resample('D').ffill().interpolate() / 7 # doesn't work

for acc_id in df['Account Id'].unique():
    mask = df.loc[df['Account Id'] == acc_id]
    print(df[mask])                                     # doesn't work

我希望你的功能应该与groupby对象如:

df = (df.set_index('year week')
        .groupby('Account Id')[cols_to_interpolate]
        .resample('D')
        .ffill()
        .interpolate() / 7)

评论中的解决方案是不同的 -interpolate适用于每个组:

df.groupby('Account Id').apply(interpolator)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Pandas 中的 Groupby 和插值 的相关文章

随机推荐