[英]Why are there different results for pandas groupby+resample on an appended dataframe
我想对我拥有的 dataframe 进行分组并重新采样。 我按int_var
和bool_var
,然后每1Min
重新采样一次以填充数据集中任何缺失的分钟数。 这对于基础 dataframe A 非常有效:
date bool_var int_var
2021-01-01 00:03:00 True 1
2021-01-01 00:06:00 False 6
2021-01-01 00:06:00 True 6
然后结果变成这样:
int_var bool_var date
1 True 2021-01-01 00:03:00 1
2021-01-01 00:04:00 0
2021-01-01 00:05:00 0
2021-01-01 00:06:00 0
6 True 2021-01-01 00:03:00 0
2021-01-01 00:04:00 0
2021-01-01 00:05:00 0
2021-01-01 00:06:00 1
6 False 2021-01-01 00:03:00 0
2021-01-01 00:04:00 0
2021-01-01 00:05:00 0
2021-01-01 00:06:00 1
这正是我想要的。 但是,正如您所看到的,数据在午夜之后开始一点,我希望从午夜开始的那些分钟也在那里。 所以我在 2021-01-01 00:00:00 为每个 bool_var / int_var 组合 append 一行,以确保重新采样从那里开始。
rows = []
some for loop:
rows.append()
extra_rows_df = pd.DataFrame(rows, columns=['date', 'bool_var', 'int_var'])
B = pd.concat([A, extra_rows_df], ignore_index=True)
生成的 dataframe B 似乎是正确的,并且格式与 dataframe A 相同:
date bool_var int_var
2021-01-01 00:00:00 True 1
2021-01-01 00:03:00 True 1
2021-01-01 00:00:00 False 6
2021-01-01 00:06:00 False 6
2021-01-01 00:00:00 True 6
2021-01-01 00:06:00 True 6
但是,如果我在 dataframe B 上运行完全相同的groupby 和 resample 命令。我的结果都很奇怪:
date 2021-01-01 00:00:00 ... 2021-12-31 23:59:00
int_var bool_var 1 ... 1
1 True
6 True
False
就像每个日期突然变成一列,而不是为每个分组列出。
TL;DR:使用stack()
。
我想到了。 在 dataframe A 中,每个 bool_var / int_var 组都有不同的日期时间值; 这里 (1, True) 从 00:03 开始,但其他一些组,例如 (2, True) 可以从 01:14 的条目开始。 一旦我填写了 dataframe A 以便每个组在 dataframe B 中的 00:00 有一个条目,并且我重新采样以填写每一分钟,每个组都有每个日期时间。 这样,所有这些日期时间都可以成为列,因为它们适用于每个组。
解决方案是在这个最终结果上使用stack()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.