5.4 DataFrame运算

学习目标

  • 目标
    • 应用add等实现数据间的加、减法运算
    • 应用逻辑运算符号实现数据的逻辑筛选
    • 应用isin, query实现数据的筛选
    • 使用describe完成综合统计
    • 使用max, min, mean, std完成统计计算
    • 使用idxmin、idxmax完成最大值最小值的索引
    • 使用cumsum等实现累计分析
    • 应用apply函数实现数据的自定义处理

1. 算数运算

  • add(other)

比如进行数学运算加上具体的一个数字

data['open'].add(1)

2018-02-27 24.53
2018-02-26 23.80
2018-02-23 23.88
2018-02-22 23.25
2018-02-14 22.49
  • sub(other)

2. 逻辑运算

2.1 逻辑运算符号

  • 例如筛选data[“open”] > 23的日期数据
    • data[“open”] > 23返回逻辑结果
data["open"] > 23

2018-02-27 True
2018-02-26 False
2018-02-23 False
2018-02-22 False
2018-02-14 False
# 逻辑判断的结果可以作为筛选的依据
data[data["open"] > 23].head()

在这里插入图片描述

  • 完成多个逻辑判断
data[(data["open"] > 23) & (data["open"] < 24)].head()

在这里插入图片描述

2.2 逻辑运算函数

  • query(expr)
    • expr:查询字符串

通过query使得刚才的过程更加方便简单

data.query("open<24 & open>23").head()
  • isin(values)

例如判断’open’是否有23.53和23.85

# 可以指定值进行一个判断,从而进行筛选操作
data[data["open"].isin([23.53, 23.85])]

在这里插入图片描述

3. 统计运算

3.1 describe

综合分析: 能够直接得出很多统计结果, count , mean , std , min , max 等

# 计算平均值、标准差、最大值、最小值
data.describe()

在这里插入图片描述

3.2 统计函数

Numpy当中已经详细介绍,在这里我们演示min(最小值), max(最大值), mean(平均值), median(中位数), var(方差), std(标准差),mode(众数)结果:
在这里插入图片描述
对于单个函数去进行统计的时候,坐标轴还是按照默认列“columns(axis=0, default),如果要对行“index” 需要指定**(axis=1)**

  • max()、min()
# 使用统计函数:0 代表列求结果, 1 代表行求统计结果
data.max(0)

open 34.99
high 36.35
close 35.21
low 34.01
volume 501915.41
price_change 3.03
p_change 10.03
turnover 12.56
my_price_change 3.41
dtype: float64
  • std()、var()
# 方差
data.var(0)

open 1.545255e+01
high 1.662665e+01
close 1.554572e+01
low 1.437902e+01
volume 5.458124e+09
price_change 8.072595e-01
p_change 1.664394e+01
turnover 4.323800e+00
my_price_change 6.409037e-01
dtype: float64

# 标准差
data.std(0)

open 3.930973
high 4.077578
close 3.942806
low 3.791968
volume 73879.119354
price_change 0.898476
p_change 4.079698
turnover 2.079375
my_price_change 0.800565
dtype: float64
  • median():中位数

中位数为将数据从小到大排列,在最中间的那个数为中位数。如果没有中间数,取中间两个数的平均值。

df = pd.DataFrame({'COL1' : [2,3,4,5,4,2],
				   'COL2' : [0,1,2,3,4,2]})

df.median()

COL1 3.5
COL2 2.0
dtype: float64
  • idxmax()、idxmin()
# 求出最大值的位置
data.idxmax(axis=0)

open 2015-06-15
high 2015-06-10
close 2015-06-12
low 2015-06-12
volume 2017-10-26
price_change 2015-06-09
p_change 2015-08-28
turnover 2017-10-26
my_price_change 2015-07-10
dtype: object

# 求出最小值的位置
data.idxmin(axis=0)

open 2015-03-02
high 2015-03-02
close 2015-09-02
low 2015-03-02
volume 2016-07-06
price_change 2015-06-15
p_change 2015-09-01
turnover 2016-07-06
my_price_change 2015-06-15
dtype: object

3.3 累计统计函数

在这里插入图片描述
那么这些累计统计函数怎么用?
在这里插入图片描述
以上这些函数可以对series和dataframe操作

这里我们按照时间的从前往后来进行累计

  • 排序
# 排序之后,进行累计求和
data = data.sort_index()
  • 对p_change进行累计求和
stock_rise = data['p_change']
# plot方法集成了前面直方图、条形图、饼图、折线图
stock_rise.cumsum()

2015-03-02 2.62
2015-03-03 4.06
2015-03-04 5.63
2015-03-05 7.65
2015-03-06 16.16
2015-03-09 16.37
2015-03-10 18.75
2015-03-11 16.36
2015-03-12 15.03
2015-03-13 17.58
2015-03-16 20.34
2015-03-17 22.42
2015-03-18 23.28
2015-03-19 23.74
2015-03-20 23.48
2015-03-23 23.74

那么如何让这个连续求和的结果更好的显示呢?

在这里插入图片描述
如果要使用plot函数,需要导入matplotlib.

import matplotlib.pyplot as plt
# plot显示图形
stock_rise.cumsum().plot()
# 需要调用show,才能显示出结果
plt.show()

关于plot,稍后会介绍API的选择

4. 自定义运算

  • apply(func, axis=0)
    • func:自定义函数
    • axis=0:默认是列,axis=1为行进行运算
  • 定义一个对列,最大值-最小值的函数
data[['open', 'close']].apply(lambda x: x.max() - x.min(), axis=0)

open 22.74
close 22.85
dtype: float64

5. 小结

  • 算术运算【知道】
  • 逻辑运算【知道】
    • 1.逻辑运算符号
    • 2.逻辑运算函数
      • 对象.query()
      • 对象.isin()
  • 统计运算【知道】
    • 1.对象.describe()
    • 2.统计函数
    • 3.累积统计函数
  • 自定义运算【知道】
    • apply(func, axis=0)
DataFrame是一种二维表格的数据结构,可以进行各种运算操作。引用提到了DataFrame运算自动对齐相同索引的数据,如果索引不对应,则会补NaN。所以在进行DataFrame运算时,可以通过对列进行数学运算,对整个表格进行筛选、排序、分组等操作。 举个例子,假设有两个DataFrame df1和df2,想要对它们进行运算。可以使用如下方法: 1. (df1 + df2) / 2:这个操作将df1和df2对应的元素相加,然后除以2,得到一个新的DataFrame,其每个元素都是对应位置元素相加后的结果。 2. df1.loc["B", "java"] = 0:这个操作将df1索引为"B",列名为"java"的元素设置为0。 3. df1.loc["C"] = 100:这个操作将df1索引为"C"的整行设置为100。 4. df1 = 10:这个操作将df1的所有元素设置为10。 除了以上方法,还可以使用DSL风格的API实现DataFrame运算操作。引用提到了一个示例代码,展示了如何使用DSL风格的API实现窗口分析函数。这种方法可以对DataFrame进行更加复杂的运算操作,例如对特定列进行聚合、排序等操作。 总之,DataFrame可以通过数学运算、筛选、分组等操作实现各种运算需求。具体的操作方法可以根据具体需求选择相应的运算方式。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [DataFrame运算](https://blog.csdn.net/qq_41170489/article/details/103878685)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *3* [DataFrame数据运算操作](https://blog.csdn.net/weixin_45687351/article/details/103812152)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值