首页 > 其他分享 >pandas.DataFrame.groupby—使用映射器或通过一系列列对数据框进行分组

pandas.DataFrame.groupby—使用映射器或通过一系列列对数据框进行分组

时间:2023-04-25 13:33:37浏览次数:42  
标签:映射器 positive df1 DataFrame result 2.0 groupby mean

语法格式

DataFrame.groupby(by=Noneaxis=0level=Noneas_index=Truesort=Truegroup_keys=_NoDefault.no_defaultsqueeze=_NoDefault.no_defaultobserved=Falsedropna=True)

常用的几个参数解释:

  • by: 可接受映射、函数、标签或标签列表。用于确定分组。
  • axis: 接受0(index)或1(columns),表示按行分或按列分。默认按行分。
  • level: 接受整数、level名,或序列,默认为None。不能与by选项同时使用。
  • as_index: 接受布尔值。默认值为True,表示整合输出时返回以group标签为索引的对象。
  • dropna: 布尔值。默认为True,表示删除NA

 代码示例

import pandas as pd

#数据框
d1 = [[3,"negative",2,1],[4,None,1,2],[5,"positive",0,2],[6,"positive",2,3],[3,"positive",6,4]]
df1 = pd.DataFrame(d1, columns=["xuhao","result","value1","value2"], index=["a","b","c","a","b"])
print(df1)

# 使用Pandas的groupby()函数按数据框一列分组
groups1 = df1.groupby(['result']).mean()
print(groups1)
groups1_1 = df1.groupby(['result'],dropna=False).mean()
print(groups1_1)

# 使用Pandas的groupby()函数按数据框两列分组
groups2 = df1.groupby(["xuhao",'result']).mean()
print(groups2)

# 使用Pandas的groupby()函数按数据框两列分组,并只求其中一列的均值
groups3 = df1.groupby(["xuhao",'result'])["value1"].mean()
print(groups3)

#将as_index设置为False,使 groupby的结果不以组标签为索引
groups4 = df1.groupby(["xuhao",'result'], as_index=False).mean() 
print(groups4)

#按照行索引分组
groups5 = df1.groupby(level=0).mean() 
print(groups5)

#当使用.apply()时,group keys默认为True

 输出结果

#df1
xuhao    result  value1  value2
a      3  negative       2       1
b      4      None       1       2
c      5  positive       0       2
a      6  positive       2       3
b      3  positive       6       4
#groups1
xuhao    value1  value2
result
negative  3.000000  2.000000     1.0
positive  4.666667  2.666667     3.0
#groups1_1
xuhao    value1  value2
result
negative  3.000000  2.000000     1.0
positive  4.666667  2.666667     3.0
NaN       4.000000  1.000000     2.0
#groups2
                value1  value2
xuhao result
3     negative     2.0     1.0
      positive     6.0     4.0
5     positive     0.0     2.0
6     positive     2.0     3.0
#groups3
xuhao  result
3      negative    2.0
       positive    6.0
5      positive    0.0
6      positive    2.0
Name: value1, dtype: float64
#groups4
   xuhao    result  value1  value2
0      3  negative     2.0     1.0
1      3  positive     6.0     4.0
2      5  positive     0.0     2.0
3      6  positive     2.0     3.0
#groups5
   xuhao  value1  value2
a    4.5     2.0     2.0
b    3.5     3.5     3.0
c    5.0     0.0     2.0

注:df.groupby() 返回一系列键值对,print()仅能看到分组结果的数据类型,将分组结果利用list()转换成了list或利用for循环可看到具体内容。

groupby对象操作函数

编写脚本

import pandas as pd
import numpy as np

#数据框
d1 = [[3,"negative",2],[4,"negative",6],[11,"positive",0],[12,"positive",2]]
df1 = pd.DataFrame(d1, columns=["xuhao","result","value"])
print(df1)

#describe()查看每组的统计信息,包括组内样本数、平均值、中位数、方差、最大值和最小值等
group1 = df1.groupby("result").describe()
#group1 = df1.groupby("result").describe()["value"] #仅查看value列
print(group1)

#agg()聚合操作,包括min, max, sum, mean, median, std, var和count
#group2 = df1.groupby("result").agg("mean")
#group2 = df1.groupby("result").agg("mean")["value"] #仅查看value列
group2 = df1.groupby("result")["value"].agg("mean") #
print(group2)

group3 = df1.groupby("result").agg({"xuhao":"sum","value":"mean"})#计算不同列的不同指标
print(group3)

#transform()将计算得到的值直接追加到数据框的最后一列
df1["mean_value"] = df1.groupby("result")["value"].transform("mean")
print(df1) 

#apply函数按特定方式计算各组数据,也可自定义函数
group4 = df1.groupby("result").apply(np.mean)
print(group4)

输出结果

#df1
xuhao    result  value
0      3  negative      2
1      4  negative      6
2     11  positive      0
3     12  positive      2
#group1
         xuhao                                                 value
         count  mean       std   min    25%   50%    75%   max count mean       std  min  25%  50%  75%  max
result
negative   2.0   3.5  0.707107   3.0   3.25   3.5   3.75   4.0   2.0  4.0  2.828427  2.0  3.0  4.0  5.0  6.0
positive   2.0  11.5  0.707107  11.0  11.25  11.5  11.75  12.0   2.0  1.0  1.414214  0.0  0.5  1.0  1.5  2.0
#group2
result
negative    4.0
positive    1.0
Name: value, dtype: float64
#group3
          xuhao  value
result
negative      7    4.0
positive     23    1.0
#df1
   xuhao    result  value  mean_value
0      3  negative      2         4.0
1      4  negative      6         4.0
2     11  positive      0         1.0
3     12  positive      2         1.0
#group4
          xuhao  value  mean_value
result
negative    3.5    4.0         4.0
positive   11.5    1.0         1.0

 

标签:映射器,positive,df1,DataFrame,result,2.0,groupby,mean
From: https://www.cnblogs.com/chaimy/p/17352337.html

相关文章

  • 盘点一道使用pandas.groupby函数实战的应用题目
    今日鸡汤声喧乱石中,色静深松里。大家好,我是我是Python进阶者。一、前言前几天Python青铜群有个叫【假装新手】的粉丝问了一个数据分析的问题,这里拿出来给大家分享下。一开始以为只是一个简单的去重问题而已,【编程数学钟老师】大佬提出使用set函数,后来有粉丝发现其实没有想的这么简......
  • Serieshe对象和Dataframe对象重新设置索引
    1.Series重新设置索引并用指定数字填充NaN: 2.Series向前填充和向后填充: 3.DataFrame重新设置行列索引: ......
  • SpringBoot 自定义对象映射器的使用
    SpringBoot底层默认使用Jackson进行Java实体对象与Json之间的转换,有时转换的效果并不是我们所期望的,需要进行额外的处理工作,有经验的小伙伴们,肯定遇到过下面两种典型的情况:当对象的属性是日期类型时,转换成json后的结果并不是我们想要的效果,还需要我们额外进行显示格式......
  • pandas-多个DataFrame同时进行merge合并
    https://blog.csdn.net/Elvis__c/article/details/126411204#假设有表df1-df2-df3-df4四张表res=[df1,df2,df3,df4]importpandasaspdfromfunctoolsimportreduceres_merge=reduce(lambdaleft,right:pd.merge(left,right,on=['name'],how='left'),re......
  • dataframe局部赋值
    背景问题描述如下图所示:(A)上图表示某仪器随开关开闭前后的变化曲线;(B)下图表示开关闭状态。现在的需求有三个:不考虑开关状态下超过指定阈值时的监测值统计特征开关打开状态(B=1,粉色区域)下超过指定阈值的监测值值局部信息统计开关闭合(B=0,空白区域)状态下超过指定阈值的监......
  • C, cython和pandas dataframe交互int64, int32的选择
    cython调用C代码的一个错误expected'int'butgot'long',原因不复杂,Ccode的int为32bit,而pandasdf缺省为np.int64(64bit),有个参数传递了数组,指针类型就不符了。两个解决方案C代码里面所有相关的int改为longlong类型或者使用pandasdataframe前转换为np.int32,即df.as......
  • Python __ Pandas __ Dataframe 实验课
    基于Dataframe实现以下功能:导入directory.csvimportnumpyasnpimportpandasaspdfdata=pd.read_csv('F:\\directory.csv')dfx=pd.DataFrame(fdata)starbucks=pd.DataFrame(fdata)显示数据集的基本信息print(fdata.head())print(fdata.info())print(fdata.describe(......
  • pandas dataframe使用方法
    目录基本读写:数据可视化基本读写:使用PandasDataFrame的步骤如下:导入Pandas模块pythonimportpandasaspd创建DataFramepythondf=pd.DataFrame({ '姓名':['张三','李四','王五'], '年龄':[18,25,30], '性别':['男&#......
  • pandas.DataFrame.values
    参考:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.values.html作用:返回DataFrame的numpy.ndarray。只有DataFrame中的值将被返回,轴标签......
  • pandas.DataFrame.shape-返回表示DataFrame维度的元组
    importpandasaspdd1=[[3,"negative",2],[4,"negative",6],[11,"positive",0],[12,"positive",2]]df1=pd.DataFrame(d1,columns=["xuhao","result","value"])pr......