我有一个按熊猫分组的数据框:
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元素时,可以将reindex
与range(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
请注意,您有
id
和date
作为索引,因此首先运行:df.reset_index(inplace=True)