Python 我是否可以应用使用';班次';在分组数据帧上,并从pandas返回简单数据帧?
我希望主题线相对清晰。我正在使用python/pandas,我正在处理股票的每日定价数据。我有一个大的csv文件,包含4000多个符号的数据,大约有100天的数据。因此有许多重复的日期和符号值,但符号/日期组合是唯一的。我正在尝试获取多个延迟(轮班)日期的每个股票代码/日期组合的百分比变化。在一个符号的数据集上,这将非常简单Python 我是否可以应用使用';班次';在分组数据帧上,并从pandas返回简单数据帧?,python,pandas,quantitative-finance,Python,Pandas,Quantitative Finance,我希望主题线相对清晰。我正在使用python/pandas,我正在处理股票的每日定价数据。我有一个大的csv文件,包含4000多个符号的数据,大约有100天的数据。因此有许多重复的日期和符号值,但符号/日期组合是唯一的。我正在尝试获取多个延迟(轮班)日期的每个股票代码/日期组合的百分比变化。在一个符号的数据集上,这将非常简单 (dataframe.Close - dataframe.Close.shift(1)) / dataframe.shift(1). 以下是初始数据的示例: TradeD
(dataframe.Close - dataframe.Close.shift(1)) / dataframe.shift(1).
以下是初始数据的示例:
TradeDate Symbol Close
1/1/2014 A 10.00
1/2/2014 A 11.00
1/3/2014 A 10.50
1/1/2014 B 2.00
1/2/2014 B 2.10
1/3/2014 B 2.05
我试图得到的结果是:
TradeDate Symbol Perf1 Perf2
1/1/2014 A NA NA
1/2/2014 A 0.10 NA
1/3/2014 A -0.045 0.05
1/1/2014 B NA NA
1/2/2014 B 0.05 NA
1/3/2014 B -0.024 0.025
我对pandas还不熟悉,我一直在网上搜寻类似的例子,或者更一般的方法,在pandas中的组上应用向量化函数。我运气不太好;我尝试了更传统的方法,循环一系列独特的代码,分别计算性能百分比,将它们组合成一个数据框,然后将其附加到一个“主”数据框中。它可以工作,但需要20多分钟(而且恰巧非常笨重)。我相信有更好的办法。但我还不知道如何询问具体的功能细节
有人能帮忙吗?谢谢…我想你可以使用
groupby
和pct\u change
(不要因为名字怪我…)
首先,让我们确保一切都是实时的,并对其进行排序:
>>> df["TradeDate"] = pd.to_datetime(df["TradeDate"])
>>> df = df.sort(["Symbol", "TradeDate"])
>>> df
TradeDate Symbol Close
0 2014-01-01 A 10.00
1 2014-01-02 A 11.00
2 2014-01-03 A 10.50
3 2014-01-01 B 2.00
4 2014-01-02 B 2.10
5 2014-01-03 B 2.05
然后做这项工作:
>>> df.groupby("Symbol")["Close"].pct_change()
0 NaN
1 0.100000
2 -0.045455
3 NaN
4 0.050000
5 -0.023810
dtype: float64
>>> df["Perf1"] = df.groupby("Symbol")["Close"].pct_change()
>>> df["Perf2"] = df.groupby("Symbol")["Close"].pct_change(2)
>>> df
TradeDate Symbol Close Perf1 Perf2
0 2014-01-01 A 10.00 NaN NaN
1 2014-01-02 A 11.00 0.100000 NaN
2 2014-01-03 A 10.50 -0.045455 0.050
3 2014-01-01 B 2.00 NaN NaN
4 2014-01-02 B 2.10 0.050000 NaN
5 2014-01-03 B 2.05 -0.023810 0.025
只进行一次分组可能会更干净,例如
grouped = df.groupby("Symbol")["Close"]
for i in range(1,5):
df["Perf{}".format(i)] = grouped.pct_change(i)
或者别的什么。太棒了。以一个高音符结束我的一周。我有一些书要读。