【发布时间】:2017-05-21 20:12:33
【问题描述】:
我有每分钟的股票数据 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 分钟块的最大/最小/总和的地方,它返回了整个列的高/低/总和。
另外,如果您知道一个初学者或多或少会理解的更简单的方法,我会全力以赴。我只写了几个星期的代码,所以我真的不知道我在做什么。
注意:我考虑过使用 qcut,但据我所知,我需要提前弄清楚我想要多少个垃圾箱。由于我将通过相同的基本格式运行不同的数据集,因此它似乎不太理想。
【问题讨论】:
标签: python pandas dataframe resampling