python 有没有一种有效的方法来迭代Pandas DataFrame块?

gcuhipw9  于 2023-01-29  发布在  Python
关注(0)|答案(1)|浏览(101)

我正在处理时间序列数据,我想对每个 Dataframe 块应用一个函数来滚动时间间隔/窗口。当我在Pandas DataFrame上使用rolling()apply()时,它会对给定时间间隔的每列迭代应用该函数。以下是示例代码:

  • 样本数据

在:

df = pd.DataFrame({'A': [1, 2, 3, 4, 5, 6], 
                'B': [2, 4, 6, 8, 10, 12]}, 
                index=pd.date_range('2019-01-01', periods=6, freq='5T'))
print(df)

输出:

A   B
2019-01-01 00:00:00  1   2
2019-01-01 00:05:00  2   4
2019-01-01 00:10:00  3   6
2019-01-01 00:15:00  4   8
2019-01-01 00:20:00  5  10
2019-01-01 00:25:00  6  12
  • 组合使用rolling()和apply()时的输出:

在:

print(df.rolling('15T', min_periods=2).apply(lambda x: x.sum().sum()))

输出:

A     B
2019-01-01 00:00:00   NaN   NaN
2019-01-01 00:05:00   3.0   6.0
2019-01-01 00:10:00   6.0  12.0
2019-01-01 00:15:00   9.0  18.0
2019-01-01 00:20:00  12.0  24.0
2019-01-01 00:25:00  15.0  30.0

预期输出:

2019-01-01 00:00:00     NaN
2019-01-01 00:05:00     9.0
2019-01-01 00:10:00    18.0
2019-01-01 00:15:00    27.0
2019-01-01 00:20:00    36.0
2019-01-01 00:25:00    45.0
Freq: 5T, dtype: float64

目前,我使用for循环来完成这项工作,但我正在寻找一种更有效的方法来处理这项操作。如果您能在Pandas框架内甚至与其他库一起提供解决方案,我将不胜感激。

  • 注意:请不要认真对待示例函数(summation),假设感兴趣的函数需要按原样迭代数据集块,即没有先前的列操作。*

先谢了!

nc1teljy

nc1teljy1#

您可以将apply()函数与自定义函数一起使用,该自定义函数将DataFrame作为参数并返回单个值。

def custom_func(df):
    return df.sum().sum()

df.rolling('15T', min_periods=2).apply(custom_func)

Out: 

2019-01-01 00:00:00     NaN
2019-01-01 00:05:00     9.0
2019-01-01 00:10:00    18.0
2019-01-01 00:15:00    27.0
2019-01-01 00:20:00    36.0
2019-01-01 00:25:00    45.0

相关问题