看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gr99123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
在 pandas 中,投票变化方面的应用主要包括投票计数、投票汇总、投票趋势分析和投票结果预测。其中,pct_change 函数在 pandas 中广泛应用于计算百分比变化,帮助分析数据的增长率、比较列之间的相对变化、检测异常值以及进行特征工程和模型构建。
数据如下:
import pandas as pd
df = pd.DataFrame(data=[["20230521", "20230522", "20230523", "20230524", "20230525"]*2,
["股票A"]*5+["股票B"]*5,
[11, 14, 12, 15, 17, 21, 24, 22, 24, 23]],
index=["日期", "名称", "价格"]).T
df
'''
日期 名称 价格
0 20230521 股票A 11
1 20230522 股票A 14
2 20230523 股票A 12
3 20230524 股票A 15
4 20230525 股票A 17
5 20230521 股票B 21
6 20230522 股票B 24
7 20230523 股票B 22
8 20230524 股票B 24
9 20230525 股票B 23
'''
需要增加一列,计算各支股票相对前一天的变化率。
对一个数据框进行按股票名称分组,并计算每个分组内的价格列的百分比变化。它使用了groupby函数按照指定的列名进行分组,然后使用transform函数对每个分组内的价格列进行百分比变化计算。最终返回一个具有相同长度和索引的序列,包含了每个分组内价格列的百分比变化值。
核心代码如下:
df.groupby('名称').价格.transform('pct_change')
'''
0 NaN
1 0.272727
2 -0.142857
3 0.25
4 0.133333
5 NaN
6 0.142857
7 -0.083333
8 0.090909
9 -0.041667
Name: 价格, dtype: object
'''
这行代码的逻辑如下:
groupby('名称')
将数据框按照 '名称' 列的值进行分组,这将创建一个按照不同的 '名称' 分组的对象。价格.transform('pct_change')
对每个分组的 '价格' 列进行变换操作。具体而言,它会计算每个分组内 '价格' 列的百分比变化。pct_change
是一个 pandas 中的函数(即 pd.Series.pct_change,在这里可以直接写字符串),用于计算序列中相邻元素的百分比变化。返回的结果是一个具有相同长度和索引的序列,其中包含了每个分组内 '价格' 列的百分比变化。
最后将这列增加到原数据:
df.assign(rate=df.groupby('名称').价格.transform('pct_change'))
'''
日期 名称 价格 rate
0 20230521 股票A 11 NaN
1 20230522 股票A 14 0.272727
2 20230523 股票A 12 -0.142857
3 20230524 股票A 15 0.25
4 20230525 股票A 17 0.133333
5 20230521 股票B 21 NaN
6 20230522 股票B 24 0.142857
7 20230523 股票B 22 -0.083333
8 20230524 股票B 24 0.090909
9 20230525 股票B 23 -0.041667
'''
如果想格式化,代码如下:
(
df.assign(rate=df.groupby('名称').价格.transform('pct_change'))
.infer_objects()
.fillna(0.0)
.style
.format({'rate': '{:.2%}'})
)
'''
日期 名称 价格 rate
0 20230521 股票A 11 0.00%
1 20230522 股票A 14 27.27%
2 20230523 股票A 12 -14.29%
3 20230524 股票A 15 25.00%
4 20230525 股票A 17 13.33%
5 20230521 股票B 21 0.00%
6 20230522 股票B 24 14.29%
7 20230523 股票B 22 -8.33%
8 20230524 股票B 24 9.09%
9 20230525 股票B 23 -4.17%
'''
这样就完成了需求。
(完)
更新时间:2024-08-18 16:16:55 标签:pandas python 股票