[英]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.