数据清洗之 分组对象与apply函数
Posted wx62c62b36cedf9
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据清洗之 分组对象与apply函数相关的知识,希望对你有一定的参考价值。
分组对象与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.getcwd()
D:\\\\Jupyter\\\\notebook\\\\Python数据清洗实战\\\\数据清洗之数据统计
os.chdir(D:\\\\Jupyter\\\\notebook\\\\Python数据清洗实战\\\\数据)
df = pd.read_csv(online_order.csv, encoding=gbk, dtype=customer:str, order:str)
df.head(5)
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)
# 只可传入一个统计参数
# agg可传入多个
# grouped.apply([np.mean, np.sum])
grouped.apply(np.mean)[[total_items, discount%, weekday]]
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
Index([customer, order, total_items, discount%, weekday, hour,
Food%, Fresh%, Drinks%, Home%, Beauty%, Health%, Baby%,
Pets%],
dtype=object)
var = [Food%, Fresh%, Drinks%, Home%, Beauty%, Health%, Baby%,
Pets%]
df[var].head(5)
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)
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
# 对每一行求和
df[var].apply(np.sum, axis=1).head(5)
0 100.00
1 100.01
2 100.01
3 99.99
4 100.01
dtype: float64
# Food% - Fresh%
df[var].apply(lambda x: x[0] - x[1], axis=1).head(5)
0 -77.60
1 -59.93
2 -39.87
3 -7.18
4 -36.25
dtype: float64
以上是关于数据清洗之 分组对象与apply函数的主要内容,如果未能解决你的问题,请参考以下文章
pandas使用groupby函数基于指定分组变量对dataframe数据进行分组使用apply函数计算每个分组指定数值变量最小值所在的数据行(编写自定义函数其中使用nsmallest)
pandas使用groupby函数基于指定分组变量对dataframe数据进行分组使用apply函数计算每个分组指定数值变量最大值所在的数据行(编写自定义函数其中使用nlargest)
function 之 arguments call apply
pandas编写自定义函数计算多个数据列的加和(sum)使用groupby函数和apply函数聚合计算分组内多个数据列的加和