python - 为每 n 行重新采样 pandas DataFrame,并在每列上使用不同的参数?

标签 python pandas dataframe resampling

我有每分钟的股票数据,包括 col_headings 日期、时间、开盘价、最高价、最低价、收盘价、交易量。我需要对每第 n 行重新采样(在本例中为每第 3 行),但在几列上使用不同的参数。到目前为止我的代码是:

import pandas as pd
import numpy as np

spy = pd.read_csv("C:\\Users\\PC\\Desktop\\spy_test.csv")

#Sample for every n minutes
n = 3
b = n-1


spy_date = pd.DataFrame(spy['Date'])
date = spy_date.iloc[b::n, :]

spy_time = pd.DataFrame(spy['Time'])
time = spy_time.iloc[b::n, :]
time = time.reset_index(drop=True)
spy_open = pd.DataFrame(spy['Open'])
open = spy_open.iloc[::n, :]
open = open.reset_index(drop=True)

spy_high = pd.DataFrame(spy['High'])
high_s = spy_high.iloc[::n, :].max()
high = pd.DataFrame(high_s)
high = high.reset_index(drop=True)

spy_low = pd.DataFrame(spy['Low'])
low_s = spy_low.iloc[::n, :].min()
low = pd.DataFrame(low_s)
low = low.reset_index(drop=True)

spy_close = pd.DataFrame(spy['Close'])
close = spy_close.iloc[::n, :]
close = close.reset_index(drop=True)

spy_volume = pd.DataFrame(spy['Volume'])
volume_s = spy_volume.iloc[n::3, :].sum()
volume = pd.DataFrame(volume_s)
volume = volume.reset_index(drop=True)

joined = [date, time, open, high, low, close, volume]

result = pd.concat(joined, axis=1)
result.columns = ['Date', 'Time', 'Open', 'High', 'Low', 'Close', 'Volume']

print(result)

此代码有效,只是“最高价”、“最低价”和“交易量”列仅返回单个值。当我想要每个 3 分钟 block 的最大/最小/总和时,它返回整个列的高/低/总和。

此外,如果您知道一种初学者或多或少能理解的更简单的方法,我洗耳恭听。我只写了几个星期的代码,所以我真的不知道我在做什么。

注意:我考虑过使用 qcut,但据我所知,我需要提前弄清楚我想要多少个垃圾箱。由于我将通过相同的基本格式运行不同的数据集,因此它似乎不太理想。

最佳答案

由于您有军事时间,因此首先将其转换为时间增量。此外,由于您有整数,因此您可能需要添加前导零。我已经使用 zfill 完成了此操作。

df['Time'] = pd.to_timedelta(pd.to_datetime(df.Time.map(lambda x: str(x).zfill(4)),format='%H%M').dt.time.astype(str))
df.set_index('Time').groupby(['Date', pd.Timegrouper('3T')]).agg({'Open':'last', 'High':'max', 'Low':'min', 'Close':'last','Volume':'sum'})

关于python - 为每 n 行重新采样 pandas DataFrame,并在每列上使用不同的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41516303/

相关文章:

python - 合并两个数据框,最多取两列

python - pandas - 具有非数值的 pivot_table? (数据错误 : No numeric types to aggregate)

python - 从Python中的随机点绘制随机方向的线

python - 在 Redshift 表中为 SMALLINT 列插入 NULL 值时出现 "Error: invalid input syntax for integer:"?

python - pandas concat 中的级别选项

r - 如何使用三个不同数据帧的变量执行 PCA 并对它们进行颜色区分?

python - 使用数组元组中的列构建 DataFrame

javascript - 使用 django-highcharts 包在模板中渲染图表或在 django 中进行常规丑陋渲染的更好选择是什么?

python - YAML 解析为对象(PyYAML Python3)

python - pd.date_range如何排除几个小时