已解决
pandas定位选取某列某指标最大值所在的行记录,比如月底
来自网友在路上 11158115提问 提问时间:2023-11-22 15:11:57阅读次数: 115
最佳答案 问答题库1158位专家为你答疑解惑
比如对于一个股价时间序列表:
怎样筛选出每个股票在月底那天的股价?
两种方法:
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 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!