Note: The thread below prompted a pull request which was eventually merged into v1.10. This issue is now resolved.
I'm using a subclassed DataFrame so that I can have more convenient access to some transformation methods and metadata particular to my use-case. Most of the DataFrame operations work as expected, in that they return an instance of the subclass, rather than an instance of pandas.DataFrame
. However, aggregation operations like DataFrame.groupby
and DataFrame.resample
seem to mess this up.
Is this a bug, or have a missed something when defining my subclass?
Below is a minimal example, tested on pandas 0.25.1:
class MyDataFrame(pd.DataFrame):
@property
def _constructor(self):
return MyDataFrame
dates = pd.date_range('2019', freq='D', periods=365)
my_df = MyDataFrame(range(len(dates)), index=dates)
assert isinstance(my_df, MyDataFrame)
# Success!
assert isinstance(my_df.diff(), MyDataFrame)
# Success!
assert isinstance(my_df.sample(10), MyDataFrame)
# Success!
assert isinstance(my_df[:10], MyDataFrame)
# Success!
assert isinstance(my_df.resample("D").sum(), MyDataFrame)
# AssertionError
assert isinstance(my_df.groupby(df.index.month).sum(), MyDataFrame)
# AssertionError