python - 尝试根据日期时间的月份在两行数据帧之间实现基本减法功能
问题描述
我试图找到数据框中股票收盘价和开盘价之间的平均每月差距。
基本功能如下所示
for i in range(1,len(df)):
#difference between today's opening price minus yesterday's closing price
gap+=(df['Open'][i]-df['Close'][i-1])
但我想avg_gap
在我的数据框中每个月都找到这个。并将其存储avg_gaps
在列表中。
数据框每天都有相关日期的开盘价、最高价、最低价和收盘价(日期时间格式)
看起来像这样
Date Open High Low Close
2019-01-01 10881.7 10923.6 10807.1 10910.1
2019-01-02 10868.8 10895.3 10735.0 10792.5
2019-01-03 10796.8 10814.0 10661.2 10672.2
2019-01-04 10699.7 10741.0 10628.6 10727.3
2019-01-07 10804.8 10835.9 10750.1 10771.8
2019-01-08 10786.2 10818.4 10733.2 10802.1
像这样,数据框有 1.5 年的数据
这是我尝试过的
list=[]
gap=0
count=0
for i in range(1,len(df)):
if(df['Date'][i].month==df['Date'][i-1].month):
count+=1
gap+=(df['Open'][i]-df['Close'][i-1])
if(df['Date'][i].month<df['Date'][i-1].month):
avg_gap=gap/count
list.append(avg_gap)
count=0
gap=0
这并没有给我正确的答案。
我希望avg_gap
一年中的每个月都有 12 个添加到列表中。
avg_gaps
计算公式为(当月总差距)/(当月总天数)
我能做些什么?
解决方案
您将希望在您DataFrame
的分组依据中创建一个月份列。然后,编写一个计算平均间隙的函数。
间隙计算
您正在添加许多差异,如下所示:
df['Open'][1]-df['Close'][0]
+df['Open'][2]-df['Close'][1]
+df['Open'][3]-df['Close'][2]
+...
但是,我们可以将其分组如下:
(df['Open'][1]+df['Open'][2]+df['Open'][3]+...)
-(df['Close'][0]+df['Close'][1]+df['Close'][2]+...)
因此,执行计算的更简单方法是
df['Open'].iloc[1:].sum()-df['Close'].iloc[:-1].sum()
代码
def average_gap(month_df):
openings = month_df['Open'].iloc[1:].sum()
closings = month_df['Close'].iloc[:-1].sum()
number = month_df.shape[0]-1
return (openings-closings)/number
df['month'] = df['Date'].dt.month
gap_by_month = df.groupby('month').apply(average_gap)
推荐阅读
- python - Python:未定义函数名称
- sql-server - 如何将 SaaS 应用程序与我们的本地 SQL Server 集成?
- apache-kafka - Kafka Streams:Kerberos 票据续订
- x86 - 如何更改 VirtualBox 为来宾操作系统模拟的 CPU 指令集,例如禁用 SSE4.2 指令集?
- c# - unity脚本无法导出
- html - 如何给字体填充?
- java - 如何将字符串转换为整数类型并从用户输入中输入双精度?
- python - 比较 Python 中两个文件的非重复文件内容格式
- python - 为什么 CoreNLP ner tagger 和 ner tagger 将分开的数字连接在一起?
- python - 在线统计 Python:方差计算不正确