大熊猫在10年的时间里找到了最长的约会对象



我有一个pandas数据帧,其中包含10年的日期时间索引每天测量股票开盘价。

以下是该集合中的一些示例数据:

date          stock price open
2005-01-01          5.5
2005-01-02          6.5
2005-01-03          6.3
2005-01-04          6
...
2006-01-01          8
2006-01-02          8.5
...
2015-01-01          19.5
2015-01-02          20

10年来的每一天都是一次观察。(不包括闰年(

我想要的是制作一个显示最高股票价格的专栏十年中每一天的价值。

这是10年内的最大值,但今年可以在日期栏中给出,我只需要股票价值。

像这样:

date      max stock price open (over decade)
01-01          19.5
01-02          20
01-03          21
01-04          25
...
03-01          22
03-02          19
...
12-01         27
12-02         26
...

有什么想法吗?我对如何在没有指定具体年份的情况下按日期分组感到困惑。

df = pd.read_csv('stocks.txt', sep=r"[ ]{2,}")
df['date'] = df['date'].str[5:]
print(df)
date    stock price open
0   01-01   5.5
1   01-02   6.5
2   01-03   6.3
3   01-04   6.0
4   01-01   8.0
5   01-02   8.5
6   01-01   19.5
7   01-02   20.0
df_gb = df['stock price open'].groupby([df['date']]).max()
print(df_gb)
date
01-01    19.5
01-02    20.0
01-03     6.3
01-04     6.0

要在新的df中获得最长年份,您可以这样做:

df_gb_dict = df_gb.to_dict()
max_year_list = []
for idx, row in df.iterrows():
for k, v in df_gb_dict.items():
if k == row['date_2'] and v == row['stock price open']:
print(k, v, idx)
max_year_list.append([k, v, idx])
new_df = pd.DataFrame(max_year_list, columns=['month_day', 'spo_high', 'date'])
new_df.sort_values(by='month_day', inplace=True)
new_df.reset_index(drop=True)
print(new_df)
month_day   spo_high    date
0   01-01   19.5    2015-01-01
1   01-02   20.0    2015-01-02
2   01-03   6.3     2005-01-03
3   01-04   6.0     2005-01-04

假设decate=200-2009、2010-2019等,但您可以通过更改下面的decate_variance计算来更改它

import pandas as pd
import datetime as dt

导入数据帧

decade = pd.read_excel('C:/stackoverflow/decade.xlsx', index_col='Date')

创建一列以按十年划分数据

decade_variance = decade.index.year//10*10 - decade.index.year
decade['Date_decade'] = decade.index.copy()
for i in range(len(decade.index)):
decade['Date_decade'][i]  = decade['Date_decade'][i] + pd.DateOffset(years=decade_variance[i])

按月天只保留十年来最大的价格,并按日期对数据进行排序

decade.sort_values(by=['Date_decade','stock Price Open'], ascending=[True, False], inplace=True)
decade.drop_duplicates(subset=['Date_decade'],inplace=True)
decade['Date_decade'] = decade['Date_decade'].dt.year

重置索引以显示月份日期并删除年份(这将把索引从DatetimeIndex更改为字符串索引(

decade['month-day'] = decade.index.copy()
decade['month-day']  = decade['month-day'].apply(lambda x: pd.datetime.strftime(x, "%m-%d"))
decade.set_index('month-day', inplace=True)
decade
stock Price Open  Date_decade
month-day       
01-01     8.0               2000
01-02     8.5               2000
01-03     6.3               2000
01-04     6.0               2000
01-01     19.5              2010
01-02     20.0              2010

最新更新