pandas - Pandas resample().size() 根据采样频率返回不同的对象类型
问题描述
我有 Pandas DataFrame,我正在使用groupby()、resample()和size()函数对其进行总结:
freq = upgrade.groupby("UPGRADESTRATEGY")
type(freq)
<class 'pandas.core.groupby.groupby.DataFrameGroupBy'>
print(freq.resample('Q'))
DatetimeIndexResamplerGroupby [freq=<QuarterEnd: startingMonth=12>, axis=0, closed=right, label=right, convention=e, base=0]
print(freq.resample('Y'))
DatetimeIndexResamplerGroupby [freq=<YearEnd: month=12>, axis=0, closed=right, label=right, convention=e, base=0]
令我惊讶的是,size()函数根据采样频率返回不同的类型:
- 如果我按季度抽样,我会收到Series,
- 如果我按年抽样,我会收到DataFrame。
代码:
print(type(freq.resample('Q').size()))
<class 'pandas.core.series.Series'>
print(type(freq.resample('Y').size()))
<class 'pandas.core.frame.DataFrame'>
输出在语义上也不同,所以我不能重复使用相同的管道来处理结果。我期望输出对象类型和输出数据的结构不依赖于我使用的采样频率。
问题:
- 当我使用不同的采样频率时,为什么我会因为size()函数而得到不同的对象类型?
- 无论指定的采样频率如何,如何更改代码以获得相同的对象类型和相同的对象结构?
我正在使用 0.23.4 版本的熊猫。
更新:
这个问题显然与数据有关。我把它归结为 10 条记录,这导致了输出类型的变化。我无法解释为什么我在这里得到不同的输出类型。按日期对值进行排序不会更改结果。
u2.dtypes
UPGRADESTRATEGY object
SCENARIO_STARTDATE datetime64[ns]
dtype: object
这会生成 DataFrame。
print(u2.iloc[-105:-96])
UPGRADESTRATEGY SCENARIO_STARTDATE
18645 b 2016-12-20 14:48:57
18646 a 2017-01-07 16:58:44
18647 b 2017-01-11 14:39:58
18648 a 2017-01-10 15:42:22
18649 a 2017-01-10 10:07:34
18650 a 2017-01-12 15:31:14
18651 a 2017-01-13 12:44:02
18652 a 2017-01-13 14:51:59
18653 a 2016-12-12 22:30:01
type(u2.iloc[-105:-96].groupby(["UPGRADESTRATEGY"]).resample('Q', on='SCENARIO_STARTDATE').size())
pandas.core.frame.DataFrame
这会生成系列。
print(u2.iloc[-104:-96])
UPGRADESTRATEGY SCENARIO_STARTDATE
18646 a 2017-01-07 16:58:44
18647 b 2017-01-11 14:39:58
18648 a 2017-01-10 15:42:22
18649 a 2017-01-10 10:07:34
18650 a 2017-01-12 15:31:14
18651 a 2017-01-13 12:44:02
18652 a 2017-01-13 14:51:59
18653 a 2016-12-12 22:30:01
type(u2.iloc[-104:-96].groupby(["UPGRADESTRATEGY"]).resample('Q', on='SCENARIO_STARTDATE').size())
pandas.core.series.Series
数据帧输出:
u2.iloc[-105:-96].groupby(["UPGRADESTRATEGY"]).resample('Q', on='SCENARIO_STARTDATE').size()
SCENARIO_STARTDATE 2016-12-31 2017-03-31
UPGRADESTRATEGY
a 1 6
b 1 1
系列输出:
u2.iloc[-104:-96].groupby(["UPGRADESTRATEGY"]).resample('Q', on='SCENARIO_STARTDATE').size()
UPGRADESTRATEGY SCENARIO_STARTDATE
a 2016-12-31 1
2017-03-31 6
b 2017-03-31 1
dtype: int64
我没主意了!
解决方案
推荐阅读
- javascript - 笑话覆盖工具失败
- windows - 如何在 Windows 上编译 Hello World 程序集?
- php - 检查一个单词是否有多个大写字母,并且只更改只有一个大写的单词(并且是第一个字母)
- ffmpeg - ffmpeg 静音音频
- c# - HTTP GET 返回列表枚举 .Net Core
- java - XML 覆盖组件 Java
- alexa - Alexa 模型评估效果很好,但在模拟器或 Alexa 设备中从未调用过意图
- javascript - 在 react-native 中按下硬件后退按钮时无法对同一组件执行 2 个操作,以下是有关后处理程序的代码
- css - CSS选择器指向兄弟没有特定类的目标元素
- reactjs - React:如何解决:“IntrinsicAttributes & Props”类型上不存在属性“children”