pandas - 使用 groupby 创建一个缺少日期的单调列表
问题描述
我正在寻找一段时间内所有县的滚动平均值。但是,第一个县“A”县缺少 1 月 3 日的时间点。
def crt_data():
data = [[datetime(2020, 1, 1), 'A', 1],
[datetime(2020,1,2), 'A', 2],
#[datetime(2020,1,3), 'A', 3],
[datetime(2020,1,4), 'A', 4],
[datetime(2020,1,1), 'B', 10],
[datetime(2020,1,2), 'B', 11],
[datetime(2020,1,3), 'B', 12],
[datetime(2020,1,4), 'B', 13],
[datetime(2020,1,1), 'C', 4],
[datetime(2020,1,2), 'C', 3],
[datetime(2020,1,3), 'C', 2],
[datetime(2020,1,4), 'C', 1]
]
df = pd.DataFrame(data, columns=['my_date', 'County', 'cmi'])
return df
df = crt_data()
print('\n \n roll over by timepoint')
df['my_mean'] = df.groupby('my_date')['cmi'].mean().reset_index(0, drop=True)
df = df.sort_values(by=['County', 'my_date'])
df['rolling_cmi2'] = df.my_mean.rolling(2).mean()
print(df)
my_date County cmi my_mean rolling_cmi2
0 2020-01-01 A 1 5.000000 NaN
1 2020-01-02 A 2 5.333333 5.166667
2 2020-01-04 A 4 7.000000 6.166667
3 2020-01-01 B 10 6.000000 6.500000
4 2020-01-02 B 11 NaN NaN
5 2020-01-03 B 12 NaN NaN
6 2020-01-04 B 13 NaN NaN
7 2020-01-01 C 4 NaN NaN
8 2020-01-02 C 3 NaN NaN
9 2020-01-03 C 2 NaN NaN
10 2020-01-04 C 1 NaN NaN
编辑:我希望看到的是这样的:
my_date County cmi my_mean rolling_cmi2
0 2020-01-01 A 1 5.000000 NaN
1 2020-01-02 A 2 5.333333 5.166667
3 2020-01-03 B 12 7.000000 6.166667
2 2020-01-04 A 4 7.000000 7.000000
当我分组时,我没有得到 1 月 3 日的日期和 1 月 1 日的两个日期。这使得滚动值不正确。
如何使用每个日期之一将其减少到单个平均值,并且该日期是正确的日期?我知道 C 县有所有正确的时间点,我可以将 C 县移到列表顶部以获得完整的日期列表吗?你会怎么做?
解决方案
推荐阅读
- c# - 无法在 winform 的事件处理程序中传递空参数?
- opencv - 如何将 OpenCL gpu 内存映射到 OpenCV 矩阵?
- javascript - 分配给 onreadystatechange 的方法怎么执行得这么快?
- python - 如何在 Tornado 中使用 OpenID 进行身份验证?
- typescript - 打字稿:文字类型的用户定义类型保护?
- r - 如何从 R 并行运行相同的 NetLogo 模拟?
- c# - 将布尔值绑定到按钮可见性
- c# - 我们如何在 ASP.Net Core 中使用 HttpClient?
- reactjs - TypeError:fetch.mockResponse 不是函数
- angular - Angular:getUserMedia() 不再适用于不安全的来源