pandas计算行或者列的总和及apply函数的使用

apply 赋予了pandas非常高灵活性。特别是配合上lambda函数之后,可以简化很多程序。特别是以行或者列处理问题的时候,非常方便

简单使用

首先,构建一个dataframe

import pandas as pd
d={'one':{'a':1,'b':2,'c':3,'d':4},'two':{'a':5,'b':6,'c':7,'d':8},'three':{'a':9,'b':10,'c':11,'d':12}}
df=pd.DataFrame(d)
#构建的dataframe如下:
print(df)
   one  two  three
a    1    5      9
b    2    6     10
c    3    7     11
d    4    8     12

计算每一行的总和:

df['row_sum']=df.apply(lambda x: x.sum(),axis=1)

print(df)
   one  two  three  row_sum
a    1    5      9       15
b    2    6     10       18
c    3    7     11       21
d    4    8     12       24

计算每一列的总和:

df.loc['col_sum']=df.apply(lambda x: x.sum(),axis=0)

print(df)
         one  two  three  row_sum
a          1    5      9       15
b          2    6     10       18
c          3    7     11       21
d          4    8     12       24
col_sum   10   26     42       78

其实,计算每一列的总和还有更简便的方法:

df=pd.DataFrame(d)
df.loc['col_sum']=df.sum()
         one  two  three
a          1    5      9
b          2    6     10
c          3    7     11
d          4    8     12
col_sum   10   26     42

apply是以df中的行或者列为单位的,其实就是一个series(或者简单理解就是一个list)。当axis=0时(默认),series对应的时df中的列,axis=1时,series对应的是df中的行。

apply处理方式是函数变换。简单点讲,就是apply的括号里面对应的是一个函数。

类似的,计算每一行的平均值

对于重新构建的dataframe

df=pd.DataFrame(d)
df['row_mean']=df.apply(lambda x:x.mean(),axis=1)
print(df)
   one  two  three  row_mean
a    1    5      9       5.0
b    2    6     10       6.0
c    3    7     11       7.0
d    4    8     12       8.0

计算每一列的最大值与最小值的差

对于上面的dataframe

df=pd.DataFrame(d)
df['d_value']=df.apply(lambda x: x.max()-x.min(),axis=1)
print(df)
   one  two  three  d_value
a    1    5      9        8
b    2    6     10        8
c    3    7     11        8
d    4    8     12        8

所以,pandas series 部分的知识还是需要的

apply函数

函数说明:

DataFrame.apply(func, axis=0, broadcast=False, raw=False, reduce=None, args=(), **kwds)

apply中的func不一定是要lambda这种匿名函数,对于def定义的函数也是适用的
对于传参,args中可以设定参数,但是参数的数目比def中定义的参数少一个,因为第一个参数是来自于df中的series
此时series类似于dict的性质(还是去学series这一部分的基础吧)

  • 4
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值