问题标签 [pandas-resample]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - Pandas df.resample 具有特定于列的聚合函数
使用pandas.DataFrame.resample我可以对 DataFrame 进行下采样:
这将使用类似日期时间的索引重新采样数据帧,以便 3 秒内的所有值聚合到一行中。列的值被平均。
问题:我有一个包含多列的数据框。是否可以为不同的列指定不同的聚合函数,例如我想要"sum"
column x
,"mean"
columny
并选择"last"
for column z
?我怎样才能达到这种效果?
我知道我可以创建一个新的空数据框,然后调用resample
3 次,但我更喜欢更快的就地解决方案。
python - 熊猫聚合器 .first() 和 .last() 之间的区别
我很好奇在这个特定实例中做什么last()
和做什么(当链接到重新采样时)。first()
如果我错了,请纠正我,但我理解你是否将参数传递给第一个和最后一个,例如 3;它返回前 3 个月或前 3 年。
在这种情况下,由于我没有将任何参数传递给first()
and last()
,当我像这样重新采样时它实际上在做什么?我知道,如果我通过链接重新采样.mean()
,我将使用平均所有月份的平均分数重新采样到几年,但是当我使用时会发生什么last()
?
更重要的是,为什么在这种情况first()
下last()
会给我不同的答案?我看到在数字上它们是不相等的。
IE:post2008.resample().first() != post2008.resample().last()
TLDR:
- 做什么
.first()
和.last()
做什么? - 在这种情况下,当链接到重新采样时会做什么
.first()
和做什么?.last()
- 为什么
.resample().first() != .resample().last()
呢?
这是聚合之前的代码:
这是print(post2008.tail(8))
输出:
这是重新采样和聚合的代码last()
:
这就是每年的情况post2008.resample('A').last()
:
这是重新采样和聚合的代码first()
:
这就是每年的情况post2008.resample('A').first()
:
python - Pandas 重新采样开始日期
我想使用特定日期(或月份)作为第一个 bin 的边缘重新采样 pandas 对象。例如,在下面的代码片段中,我希望我的第一个索引值是2020-02-29
并且我很乐意指定start=2
or start="2020-02-29"
。
到目前为止,这是我能想到的最干净的用途pd.cut
和groupby
:
python - 在不填写缺失时间的情况下重新采样 Pandas 数据框
重新采样数据帧可以使数据帧达到更高或更低的时间分辨率。大多数情况下,这用于降低分辨率(例如,将 1 分钟数据重新采样为每月值)。当数据集稀疏时(例如,2020 年 2 月没有收集到数据),2020 年 2 月的行将用重新采样的数据帧的 NaN 填充。问题是当数据记录很长且稀疏时,会有很多 NaN 行,这会使数据帧变得不必要地大并占用大量 CPU 时间。例如,考虑这个数据帧和重采样操作:
此数据框中的大部分数据都是无用的,可以通过以下方式删除:
但是,这是草率的。是否有另一种方法来重新采样不使用 NaN 填充所有数据间隙的数据帧(即在上面的示例中,生成的数据帧将只有两行)?
python - 使用 groupby apply 与 resample apply 时的 bin 有什么区别?
这是一个有点宽泛的话题,但我会尝试将其缩减为一些具体的问题。
我注意到两者之间的区别resample
,groupby
我很想了解。这是一些每小时的时间序列数据:
我可以使用 or 对数据进行下采样groupby
(freq
pandas.Grouper
这resample
似乎是更典型的做法):
我的印象是,这两者本质上是一回事(如果我错了,请纠正我,但resample
重新命名了groupby
)?但是我发现,当使用apply
每个分组对象的方法时,您可以索引“DataFrameGroupBy”对象中的特定列,g
但不能索引“Resampler”对象r
:
看起来“看到”的数据d
在apply
每种情况下都不同,如下所示:
但是,如果您只是简单地遍历 Resampler 对象,您将获得作为 DataFrames 的 bin,这看起来类似于groupby
:
迭代 DataFrameGroupBy 对象时,打印输出是相同的。
我的问题基于上述?
- 您可以使用
resample
和访问特定列apply
吗?我以为我有这样做的代码,但现在我想我错了。 - 为什么
resample
apply
每个 bin 的每列而不是每个 bin 的 Series 工作DataFrames
?
任何关于这里发生的事情的一般性评论,或者是否应该鼓励或阻止这种模式,也将不胜感激。谢谢!
python - 在熊猫中重新采样布尔值
我遇到了一个属性,我发现在pandas
. 这是一些时间序列数据:
所以数据看起来像:
我原以为我可以在重新采样时对布尔列执行简单的操作(如求和),但是(原样)这失败了:
“布尔”列被删除。我对为什么会发生这种情况的印象是 b/cdtype
列的object
. 更改以解决问题:
但是(奇怪的是)您仍然可以通过索引重新采样对象而不更改布尔值来求和dtype
:
而且,如果唯一的列是布尔值,您仍然可以重新采样(尽管该列仍然是object
):
是什么让后两个示例起作用?我可以看到它们可能更明确一点(“拜托,我真的想重新采样此列!”),但我不明白为什么resample
如果可以完成原始操作则不允许操作。
python - 如何在`pandas``Series`中进行“加权上采样”?
我在 python 中有一个函数,用于在上采样时分配值。例如,要对我的汽车从每月到每天的行驶距离进行上采样:
该函数将每个月的值平均除以该月的天数,这会导致该2020-02
值除以 29,2020-03
在这种情况下,根据需要将该值除以 31。
但是,当上采样到周期具有不均匀持续时间的频率时,这会给我带来不想要的结果。此属性的两种情况:
- 逐月:
我想要的是将一年的价值划分为几个月,每个月都会收到与其 duration 成比例的分数。31/366 * x
即,我希望将年份值拆分为,29/366 * x
等月份:
有没有办法做到这一点?
- 夏令时
第二种情况是在 DST 转换中,它实际上已经在我的初始示例中显示。2020-03-29
比我的时区中的其他三月天短 1 小时,因此它实际上应该比其他天收到更小的三月值。
尽管它与情况 1 是同一类型的问题,但我怀疑它会更难解决。
编辑:我找到了解决情况 1 的方法,但不是情况 2;在这个问题下面看到我的答案。在改进我的答案以及包括第二种情况方面仍然感谢帮助。
如果我们找到了一种稳健的方法来做这件事,但它有点详细,我可能是一个很好的请求功能(或者尝试通过拉取请求自己添加它),因为它似乎是一个很好的补充。因此,扩展PeriodIndexResampler
api 以允许.distribute()
具有此功能的方法,除了.ffill()
,sum()
等.mean()
方法。
python - pandas .resample() 不适用于某些示例。为什么?
问题
- 我希望 Pandas
.resample()
方法的结果具有 2 级索引。正如您可以在下面的示例中查看的那样,对 的重新采样good_example_df
会产生 2 级索引。 index_list
当我将from的第二个元素更改为datetime(2020,1,2,12,39,59)
todatetime(2020,1,3,12,39,59)
时, .resample() 方法只给了我 1 级索引。这个例子是用 给出的bad_example_df
。这是我不想发生的事情。- 如何使
.resample()
方法的结果始终具有 2 级索引,就像 good_example_df 一样? - 我问这个问题的原因是我希望重采样方法的结果是一致的。我不希望方法的结果因输入而异。
代码示例
python - 数据框中每月值的平均值,日期为列
感谢您投入时间来帮助我:)
我有如下数据框(df_NSE_Price_):
我想要如下输出:
输出数据必须具有每月数据的平均值。
到目前为止我已经尝试过
df_NSE_Price_.resample('M',axis=1).mean()
但这给了我错误仅对 DatetimeIndex、TimedeltaIndex 或 PeriodIndex 有效,但得到了一个“索引”实例