繁体   English   中英

为什么 pandas groupby+resample 在附加的 dataframe 上有不同的结果

[英]Why are there different results for pandas groupby+resample on an appended dataframe

我想对我拥有的 dataframe 进行分组并重新采样。 我按int_varbool_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM