精华内容
下载资源
问答
  • Python实现按某一列关键字分组,并计算各列的平均值,并用该值填充该分类该列的nan值。 DataFrame数据格式 fillna方式实现 groupby方式实现 DataFrame数据格式 以下是数据存储形式: fillna方式实现 1、按照...
  • Python实现按某一列关键字分组,并计算各列的平均值,并用该值填充该分类该列的nan值。 DataFrame数据格式 fillna方式实现 groupby方式实现 DataFrame数据格式以下是数据存储形式: fillna方式实现 按照...

    Python实现按某一列关键字分组,并计算各列的平均值,并用该值填充该分类该列的nan值。

    DataFrame数据格式

    以下是数据存储形式:
    行业数据

    fillna方式实现

    1. 按照industryName1列,筛选出业绩
    2. 筛选出相同行业的Series
    3. 计算平均值mean,采用fillna函数填充
    4. append到新DataFrame中
    5. 循环遍历行业名称,完成2,3,4步骤
    factordatafillna = pd.DataFrame()
    industrys = newfactordata1.industryName1.unique()
    for ind in industrys:
        t = newfactordata1.industryName1 == ind
        a = newfactordata1[t].fillna(newfactordata1[t].mean())
        factordatafillna = factordatafillna.append(a)

    groupby方式实现

    采用groupby计算,详细见代码注释

    
    df = pd.DataFrame({'code':[1,2,3,4,5,6,7,8],
                       'value':[np.nan,5,7,8,9,10,11,12],                   
                       'value2':[5,np.nan,7,np.nan,9,10,11,12],
                       'indstry':['农业1','农业1','农业1','农业2','农业2','农业4','农业2','农业3']},
                        columns=['code','value','value2','indstry'],
                        index=list('ABCDEFGH'))
    
    # 只留下需要处理的列
    cols = [col for col in df.columns if col not in['code','indstry']]
    # 分组的列
    gp_col = 'indstry'
    # 查询nan的列
    df_na = df[cols].isna()
    # 根据分组计算平均值
    df_mean = df.groupby(gp_col)[cols].mean()
    
    print(df)
    
    # 依次处理每一列
    for col in cols:
        na_series = df_na[col]
        names = list(df.loc[na_series,gp_col])     
    
        t = df_mean.loc[names,col]
        t.index = df.loc[na_series,col].index
    
        # 相同的index进行赋值     
        df.loc[na_series,col] = t
    
    print(df)
    code  value  value2 indstry
    A     1    NaN     5.0     农业1
    B     2    5.0     NaN     农业1
    C     3    7.0     7.0     农业1
    D     4    8.0     NaN     农业2
    E     5    9.0     9.0     农业2
    F     6   10.0    10.0     农业4
    G     7   11.0    11.0     农业2
    H     8   12.0    12.0     农业3
       code  value  value2 indstry
    A     1    6.0     5.0     农业1
    B     2    5.0     6.0     农业1
    C     3    7.0     7.0     农业1
    D     4    8.0    10.0     农业2
    E     5    9.0     9.0     农业2
    F     6   10.0    10.0     农业4
    G     7   11.0    11.0     农业2
    H     8   12.0    12.0     农业3
    
    展开全文
  • 读Excel直接得到一个dataframe,按月进行分组,每个组分别调用自定义的函数求平均值。 中间调用自定义函数循环处理分组dataframe的时候报错,debug才发现: dataframe用groupby分组以后,可以分别读取每一块,但其中...

    有1年12个月每天24个点的数据,想按累积面积算月平均(想象每个月的数据点对应一条折线图,实际是想求这个折线图与坐标轴形成的梯形面积累计值除以时间的平均值)。
    读Excel直接得到一个dataframe,按月进行分组,每个组分别调用自定义的函数求平均值。

    中间调用自定义函数循环处理分组dataframe的时候报错,debug才发现:
    dataframe用groupby分组以后,可以分别读取每一块,但其中数据的索引还是按原始dataframe来编号的。比如原始dataframe每一列有10个数据,索引编号是0-9,按某一列分组后分为2组,读取第2块,数据的索引编号是从5开始,不是从0开始。

    df = pd.read_excel('D:/2018-washed2.xlsx')
    #时间从 年-月-日 时:分:秒 处理为 年-月
    df['时间']=df['时间'].apply(lambda x:datetime.strftime(x,'%Y-%m'))
    df.drop(['Unnamed: 0'], axis=1, inplace=True)
    names = df.keys()
    names = names.tolist()#获取列名,后面遍历会用到
    #获取每个月的数据点数
    daylen = []
    for name, group in df1:
        daylen.append(group['时间'].count())
    
    #定义函数,获取所给数组的数据点对应折线图的面积
    def get_vol(array1,k):
        vol = 0
        for i in range(k, k+len(array1)):
            vol = vol + (array1[i] + array1[i + 1]) * 3600 * 0.5
        vol = (vol / len(array1)) / 3600
        return vol
        
    #求数组前N(N=indexhere)个元素之和
    def listcumsum(array,indexhere):
        data = 0
        if(indexhere == 1):
            return daylen[0]
        else:
            for i in range(indexhere):
                data = data + array[i]
        return data
    
    #把每个分组的dataframe按自定义函数统计
    def averflow(name,df,ts):
        if (ts == 0):
            k = 0
        else:
            k = listcumsum(daylen,ts)
        newDataFrame = pd.DataFrame(index=[name])
        columns = names
        for c in columns:
            if (c == '时间'):
                newDataFrame[c] = name
            else:
                newDataFrame[c] = get_vol(df[c],k)
        return newDataFrame
    
    list2 = []
    #dataframe按月分组
    df1 = df.groupby(df['时间'])
    global times
    times = 0
    for name, group in df1:
        #每个分组分别调用自定义函数重新统计,返回一个新的dataframe
        cc=averflow(name,group,times)
        list2.append(cc)
        times = times+1
    
    展开全文
  • Python实现按某一列关键字分组,并计算各列的平均值,并用该值填充该分类该列的nan值。DataFrame数据格式fillna方式实现groupby方式实现DataFrame数据格式以下是数据存储形式:fillna方式实现1、按照industryName1列...

    Python实现按某一列关键字分组,并计算各列的平均值,并用该值填充该分类该列的nan值。

    DataFrame数据格式

    fillna方式实现

    groupby方式实现

    DataFrame数据格式

    以下是数据存储形式:

    fillna方式实现

    1、按照industryName1列,筛选出业绩

    2、筛选出相同行业的Series

    3、计算平均值mean,采用fillna函数填充

    4、append到新DataFrame中

    5、循环遍历行业名称,完成2,3,4步骤

    factordatafillna = pd.DataFrame()

    industrys = newfactordata1.industryName1.unique()

    for ind in industrys:

    t = newfactordata1.industryName1 == ind

    a = newfactordata1[t].fillna(newfactordata1[t].mean())

    factordatafillna = factordatafillna.append(a)

    groupby方式实现

    采用groupby计算,详细见代码注释

    df = pd.DataFrame({'code':[1,2,3,4,5,6,7,8],

    'value':[np.nan,5,7,8,9,10,11,12],

    'value2':[5,np.nan,7,np.nan,9,10,11,12],

    'indstry':['农业1','农业1','农业1','农业2','农业2','农业4','农业2','农业3']},

    columns=['code','value','value2','indstry'],

    index=list('ABCDEFGH'))

    # 只留下需要处理的列

    cols = [col for col in df.columns if col not in['code','indstry']]

    # 分组的列

    gp_col = 'indstry'

    # 查询nan的列

    df_na = df[cols].isna()

    # 根据分组计算平均值

    df_mean = df.groupby(gp_col)[cols].mean()

    print(df)

    # 依次处理每一列

    for col in cols:

    na_series = df_na[col]

    names = list(df.loc[na_series,gp_col])

    t = df_mean.loc[names,col]

    t.index = df.loc[na_series,col].index

    # 相同的index进行赋值

    df.loc[na_series,col] = t

    print(df)

    code value value2 indstry

    A 1 NaN 5.0 农业1

    B 2 5.0 NaN 农业1

    C 3 7.0 7.0 农业1

    D 4 8.0 NaN 农业2

    E 5 9.0 9.0 农业2

    F 6 10.0 10.0 农业4

    G 7 11.0 11.0 农业2

    H 8 12.0 12.0 农业3

    code value value2 indstry

    A 1 6.0 5.0 农业1

    B 2 5.0 6.0 农业1

    C 3 7.0 7.0 农业1

    D 4 8.0 10.0 农业2

    E 5 9.0 9.0 农业2

    F 6 10.0 10.0 农业4

    G 7 11.0 11.0 农业2

    H 8 12.0 12.0 农业3

    以上这篇Python Pandas实现数据分组求平均值并填充nan的示例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

    展开全文
  • 代码中tdf是一个dataframe 当以uid分组,并每组的平均值后在转化为dataframe ,组名并入到index 这样非常不方便我们通过index获取值,因为uid太长了。这个问题苦恼了我很久,终于在官方文档中看到解决方法,只要在...

    利用pandas做分组聚合时,分组组名默认是变化成index,如图

    grouped = tdf.groupby('uid')
    mean=grouped.mean();
    forwardmeandf=pd.DataFrame(mean)
    

    代码中tdf是一个dataframe 当以uid分组,并求每组的平均值后在转化为dataframe ,组名并入到index

    在这里插入图片描述

    这样非常不方便我们通过index获取值,因为uid太长了。这个问题苦恼了我很久,终于在官方文档中看到解决方法,只要在分组的时候指定as_index=false便可。

    grouped = tdf.groupby('uid',as_index=False)
    mean=grouped.mean();
    forwardmeandf=pd.DataFrame(mean)
    

    结果如图

    在这里插入图片描述
    这样不但方便我们利用index做选取,而且使利用uid与没有分组的表做join也成为可能。

    链接:https://blog.csdn.net/u011199646/article/details/48109839/

    展开全文
  • Python实现按某一列关键字分组,并计算各列的平均值,并用该值填充该分类该列的nan值。DataFrame数据格式fillna方式实现groupby方式实现DataFrame数据格式以下是数据存储形式:fillna方式实现1、按照industryName1列...
  • Python实现按某一列关键字分组,并计算各列的平均值,并用该值填充该分类该列的nan值。DataFrame数据格式fillna方式实现groupby方式实现DataFrame数据格式以下是数据存储形式:fillna方式实现1、按照industryName1列...
  • 转载,侵删,感谢原作者 利用pandas做分组聚合时,分组组名默认是变化成index,如图 grouped = tdf.groupby...代码中tdf是一个dataframe当以uid分组,并每组的平均值后在转化为dataframe,组名并入到index 这...
  • 利用pandas做分组聚合时,分组组名默认是变化成index,如图 grouped = tdf.groupby('...代码中tdf是一个dataframe 当以uid分组,并每组的平均值后在转化为dataframe ,组名并入到index 这样非常不方便我们通过index
  • 在将数据集准备好了之后,通常的任务是计算分组统计或生成透视表。...计算分组摘要统计,如计数、平均值,标准差3.对DataFrame的列应用各种各样的函数4.计算透视表或交叉表5.执行分位数分析以及其他分组分析groupby...
  • Python分组众数的方法

    千次阅读 2020-10-13 12:41:42
    当我们想要对比不同分组的数据的差异的时候,一般来说会用到平均数,但是平均数容易受到极端的影响,这时候中位数和众数就是一个比较好的选择。 在pandas中,我们可以利用pivot_table函数和groupby函数来求分组...
  • pyspark之Dataframe操作(二)

    千次阅读 2019-02-28 16:18:16
    1. 分组统计 2. join 操作 3. 缺失值处理 4. 空值判断 5. 缺失值处理 ...分组统计应该是用的最多的方法了,比如分地区求平均值,最大最小值等。 # 分组计算1 color_df.groupBy('length').coun...
  • 文章目录理解GroupBy城市天气进行GroupBy操作 理解GroupBy 类似于数据库分组的 GroupBy操作和数据库...对group求平均值返回DataFrame import numpy as np import pandas as pd from pandas import Series,Data...
  • 对数据集进行分类,并在每组数据...在进行groupby分组后,我们可以对分组对象进行各种操作,比如求分组平均值mean() 很多时候,我们需要返回dataframe型数据进行二次操作 size()方法可以获取各分组的大小 遍历分组
  • 每个组都可以独立应用函数(如求和,求平均值)3.将结果合并到一个数据结构中DataFrame.groupby(by=None,axis=0,level=None,as_index=True,sort=True,group_keys=True,squeeze=False,observed=False)by 映射,字典或...
  • 目录 Series的索引 重复索引 对重复索引的处理 多级索引 更为复杂的多级索引 ...从文件中读出的DATAFRAME修改索引 ...有重复的 ...查询数据里是否存在...对重复值求平均 对重复取第一项 多级索引 创建一...
  • pandas琐碎知识点

    2017-08-01 17:09:36
    利用groupby分组求平均值 people.groupby(key).mean() 该方法能够利用key分组,并得到均值,但是会创建一个新的视图,key为行,列不变 people.groupby(key).transform(np.mean)该方法得到的均值按照原来的样子展
  • pandas练习题

    2020-11-26 22:22:16
    ① 以A分组出C,D的分组平均值 ② 以A,B分组出D,E的分组求和 ③ 以A分组,得到所有分组,以字典显示 ④ 按照数值类型分组,求和 ⑤ 将C,D作为一组分出来,并计算求和 ⑥ 以B分组出每组的均值,求和,最大...
  • Pandas详解二十五之聚合运算agg

    千次阅读 多人点赞 2018-08-28 15:49:17
    在将数据分组(groupby)后,新手若不知函数 agg() 的情况下,很有可能写出二三十行的for循环只为每个分组平均值。在这里,介绍个强大的函数:agg() ,能让你的代码缩减到一行。 创建对象和分组 df1=pd....
  • 聚合通常需要对整个数据集或一个或多个列进行某种形式的分组,然后对每个组应用聚合函数,如求和、计数或求平均值。Spark提供了许多常用的聚合函数。这里介绍下基本的聚合函数和分组聚合操作函数。 首先创建一个用于...

空空如也

空空如也

1 2
收藏数 24
精华内容 9
关键字:

dataframe分组求平均值