数据清洗之 分组对象与apply函数

举报
ruochen 发表于 2021/03/28 01:29:01 2021/03/28
【摘要】 分组对象与apply函数 函数apply即可用于分组对象,也可以作用于dataframe数据Groupby.apply(func)需要注意axis=0和axis=1的区别 np.sum, axis=0 相当于计算每列的总和np.sum, axis=1 相当于计算每行的总和 import pandas as pd import numpy as np import ...

分组对象与apply函数

  • 函数apply即可用于分组对象,也可以作用于dataframe数据
  • Groupby.apply(func)
  • 需要注意axis=0和axis=1的区别
    • np.sum, axis=0 相当于计算每列的总和
    • np.sum, axis=1 相当于计算每行的总和
import pandas as pd
import numpy as np
import os

  
 
  • 1
  • 2
  • 3
os.getcwd()

  
 
  • 1
'D:\\Jupyter\\notebook\\Python数据清洗实战\\数据清洗之数据统计'

  
 
  • 1
os.chdir('D:\\Jupyter\\notebook\\Python数据清洗实战\\数据')

  
 
  • 1
df = pd.read_csv('online_order.csv', encoding='gbk', dtype={'customer':str, 'order':str})

  
 
  • 1
df.head(5)

  
 
  • 1
customer order total_items discount% weekday hour Food% Fresh% Drinks% Home% Beauty% Health% Baby% Pets%
0 0 0 45 23.03 4 13 9.46 87.06 3.48 0.00 0.00 0.00 0.0 0.0
1 0 1 38 1.22 5 13 15.87 75.80 6.22 2.12 0.00 0.00 0.0 0.0
2 0 2 51 18.08 4 13 16.88 56.75 3.37 16.48 6.53 0.00 0.0 0.0
3 1 3 57 16.51 1 12 28.81 35.99 11.78 4.62 2.87 15.92 0.0 0.0
4 1 4 53 18.31 2 11 24.13 60.38 7.78 7.72 0.00 0.00 0.0 0.0
grouped = df.groupby('weekday')

  
 
  • 1
# 只可传入一个统计参数
# agg可传入多个
# grouped.apply([np.mean, np.sum])

  
 
  • 1
  • 2
  • 3
grouped.apply(np.mean)[['total_items', 'discount%', 'weekday']]

  
 
  • 1
total_items discount% weekday
weekday
1 30.662177 8.580705 1.0
2 31.868612 8.638014 2.0
3 31.869796 7.794507 3.0
4 32.251899 8.068155 4.0
5 31.406619 9.159031 5.0
6 32.154814 8.414258 6.0
7 32.373837 8.710171 7.0
df.columns

  
 
  • 1
Index(['customer', 'order', 'total_items', 'discount%', 'weekday', 'hour', 'Food%', 'Fresh%', 'Drinks%', 'Home%', 'Beauty%', 'Health%', 'Baby%', 'Pets%'], dtype='object')

  
 
  • 1
  • 2
  • 3
  • 4
var = ['Food%', 'Fresh%', 'Drinks%', 'Home%', 'Beauty%', 'Health%', 'Baby%', 'Pets%']

  
 
  • 1
  • 2
df[var].head(5)

  
 
  • 1
Food% Fresh% Drinks% Home% Beauty% Health% Baby% Pets%
0 9.46 87.06 3.48 0.00 0.00 0.00 0.0 0.0
1 15.87 75.80 6.22 2.12 0.00 0.00 0.0 0.0
2 16.88 56.75 3.37 16.48 6.53 0.00 0.0 0.0
3 28.81 35.99 11.78 4.62 2.87 15.92 0.0 0.0
4 24.13 60.38 7.78 7.72 0.00 0.00 0.0 0.0
# 计算每个变量的总和
df[var].apply(np.sum, axis=0)

  
 
  • 1
  • 2
Food% 706812.19
Fresh% 606818.38
Drinks% 700477.06
Home% 406187.25
Beauty% 176788.48
Health% 33988.76
Baby% 332884.34
Pets% 31292.61
dtype: float64

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
# 对每一行求和
df[var].apply(np.sum, axis=1).head(5)

  
 
  • 1
  • 2
0 100.00
1 100.01
2 100.01
3 99.99
4 100.01
dtype: float64

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
# Food% - Fresh%
df[var].apply(lambda x: x[0] - x[1], axis=1).head(5)

  
 
  • 1
  • 2
0   -77.60
1   -59.93
2   -39.87
3 -7.18
4   -36.25
dtype: float64

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

文章来源: ruochen.blog.csdn.net,作者:若尘,版权归原作者所有,如需转载,请联系作者。

原文链接:ruochen.blog.csdn.net/article/details/105599032

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。