我发现输出与panda groupby重采样行为不一致。
取这个 Dataframe ,其中类别A具有第一天和第二天的样本,类别B仅具有第二天的样本:
df1 = pd.DataFrame(index=pd.DatetimeIndex(
['2022-1-1 1:00','2022-1-2 1:00','2022-1-2 1:00']),
data={'category':['A','A','B']})
# Output:
# category
#2022-01-01 01:00:00 A
#2022-01-02 01:00:00 A
#2022-01-02 01:00:00 B
当我使用groupby重采样时,我得到了一个在类别和时间上具有多索引的Series:
res1 = df1.groupby('category').resample('1D').size()
#Output:
#category
#A 2022-01-01 1
# 2022-01-02 1
#B 2022-01-02 1
#dtype: int64
但是如果我再添加一个数据点,这样B在第1天有一个样本,返回值是一个 Dataframe ,类别中有一个索引,列对应于时间箱:
df2 = pd.DataFrame(index=pd.DatetimeIndex(
['2022-1-1 1:00','2022-1-2 1:00','2022-1-2 1:00','2022-1-1 1:00']),
data={'category':['A','A','B','B']})
res2 = df2.groupby('category').resample('1D').size()
# Output:
# 2022-01-01 2022-01-02
# category
# A 1 1
# B 1 1
这是预期的行为吗?我在Pandas1. 4. 2中重现了这个行为,但找不到bug报告。
2条答案
按热度按时间wh6knrhe1#
我向Pandas提交了错误报告46826。
qxgroojn2#
结果应该是
Series
和MultiIndex
在两种情况下。有一个bug导致df.groupby.resample.size
在所有组都有相同索引的情况下返回一个宽DF。这个问题已经在master分支上修复。感谢您打开issue。