当前位置:首页 > 编程笔记 > 正文
已解决

pandas定位选取某列某指标最大值所在的行记录,比如月底

来自网友在路上 11158115提问 提问时间:2023-11-22 15:11:57阅读次数: 115

最佳答案 问答题库1158位专家为你答疑解惑

比如对于一个股价时间序列表:

年月     年月日股价贵州茅台202301202301011500贵州茅台202301202301201600贵州茅台202301202301311400贵州茅台202302202302051300贵州茅台202302202302281700五粮液202301202301021000五粮液202301202301312000

怎样筛选出每个股票在月底那天的股价?

两种方法:

1) 先制定好一个每年每月最后一个交易日的表,然后查表

2)数据分析方法,先按股票和年月分组,然后再定位选取每个月里面日期最大的那一行。

下面是第二种方法的代码:

import pandas as pd  # 假设你的数据框为df,ym是年月,ymd是年月日,code是股票代码,sc是股价  
df = pd.DataFrame({'ym': ['202301', '202301','202301','202302','202302', '202301', '202301'],'code':['贵州茅台','贵州茅台','贵州茅台','贵州茅台','贵州茅台','五粮液','五粮液'],'ymd': ['20230101', '20230120', '20230131', '20230205','20230228','20230102','20230131'],"sc":[1500,1600,1400,1300,1700,1000,2000]})  
df['ymd'] = pd.to_datetime(df['ymd'])print(df) # 假设您的数据框名为df,包含年月(ym)、年月日(ymd)和得分(sc)列
# 首先按年月分组
grouped = df.groupby(['code','ym'])# 在每个组里面选取年月日最大的那一行记录
#两种方法:
# 1)
#result = grouped.apply(lambda x: x[x['ymd'] == x['ymd'].max()])
#2)
max_date_rows = grouped['ymd'].idxmax()
result = df.loc[max_date_rows]# 重置索引
result.reset_index(drop=True, inplace=True)print(result)

 运行结果:

       年月    代码        年月日          股价
0  202301  贵州茅台 2023-01-01  1500
1  202301  贵州茅台 2023-01-20  1600
2  202301  贵州茅台 2023-01-31  1400
3  202302  贵州茅台 2023-02-05  1300
4  202302  贵州茅台 2023-02-28  1700
5  202301  五粮液    2023-01-02   1000
6  202301  五粮液    2023-01-31   2000
       年月    代码        年月日          股价
0  202301  五粮液     2023-01-31  2000
1  202301  贵州茅台 2023-01-31  1400
2  202302  贵州茅台 2023-02-28  1700

查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"pandas定位选取某列某指标最大值所在的行记录,比如月底":http://eshow365.cn/6-41862-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!