pandas - Pandas 是否有不依赖于日期时间索引的重采样方法?
问题描述
我有一个系列,我想在三个子集/块中应用一个外部函数。尽管实际的外部函数更复杂,但为了举例,让我们假设我的外部函数采用整数的 ndarray 并返回所有值的总和。例如:
series = pd.Series([1,1,1,1,1,1,1,1,1])
# Some pandas magic similar to:
result = series.resample(3).apply(myFunction)
# where 3 just represents every 3 values and
# result == pd.Series([3,3,3])
正如上面的伪代码所暗示的那样,我查看了将Series.resample和Series.apply结合起来,但它似乎resample
取决于日期时间索引。关于如何通过在没有日期时间索引的情况下应用这样的外部函数来有效地进行下采样的任何想法?还是您只是建议创建一个临时日期时间索引来执行此操作,然后恢复到原始索引?
解决方案
pandas.DataFrame.groupby可以在这里解决问题。您需要的是一个重复索引来指定子集/块
创建块
n = 3
repeat_idx = np.repeat(np.arange(0,len(series), n), n)[:len(series)]
print(repeat_idx)
array([0, 0, 0, 3, 3, 3, 6, 6, 6])
通过...分组
def myFunction(l):
output = 0
for item in l:
output+=item
return output
series = pd.Series([1,1,1,1,1,1,1,1,1])
result = series.groupby(repeat_idx).apply(myFunction)
(result)
0 3
3 3
6 3
该解决方案也适用于不增加系列长度的块,
n = 4
repeat_idx = np.repeat(np.arange(0,len(series), n), n)[:len(series)]
print(repeat_idx)
array([0, 0, 0, 0, 4, 4, 4, 4, 8])
result = series.groupby(repeat_idx).apply(myFunction)
print(result)
0 4
4 4
8 1
推荐阅读
- javascript - Mapbox如何隐藏一些兴趣点
- jpa - Spring Data JPA:使用 Pageable 但使用实体的一组特定字段
- node.js - 无法让节点正确地将数据通过管道传输到下载文件
- android - Android:活动关闭时服务失去传感器焦点
- android - Firebase 匿名身份验证时间问题
- kubernetes - prometheus 无法与 influxDB 对话
- methods - 通过 Google Calendar API 获取共享日历列表
- symfony - 使用 JMSSerializer 序列化时的空关系
- tensorflow - Tensorflow BeamSearchDecoder 如何处理initial_state
- ember.js - ember模型表中的filterWithSelect,删除正则表达式