我有一个按熊猫分组的数据框:

id    date    temperature
1  2011-9-12   12
   2011-9-18   12
   2011-9-19   12
2  2011-9-12   15
3  2011-9-12   15
   2011-9-16   15


在这里,每个id都有不同数量的温度记录。

我想修复它们,例如每个id的平均记录数(例如3)。如果缺少某些记录,我想先放入零。

即我的最终数据框应为:

id    temperature
1     12
      12
      12
2     0
      0
      15
3     0
3     15
3     15


我需要将每个id的记录数自定义为一些数字,也可以是每个id的平均记录数。如何获得平均值?

最佳答案

访问groupby元素时,可以将reindexrange(3)一起使用。
之后,我们sort_values并将NaN设置为第一位置,因此我们可以将fillna设置为0。

df_new = pd.concat([
    d[['id', 'temperature']].reset_index(drop=True).reindex(range(3)).sort_values('id', na_position='first')
    for _, d in df.groupby('id')
], ignore_index=True)

df_new['id'].fillna(method='bfill', inplace=True)
df_new['temperature'].fillna(0, inplace=True)

print(df_new)
    id  temperature
0  1.0         12.0
1  1.0         12.0
2  1.0         12.0
3  2.0          0.0
4  2.0          0.0
5  2.0         15.0
6  3.0          0.0
7  3.0         15.0
8  3.0         15.0


请注意,您有iddate作为索引,因此首先运行:

df.reset_index(inplace=True)

07-24 09:52
查看更多