python 分类、分组、透视、频数加权平均等高频数据处理工具

为了快速应用将python 数据处理中的高频功能封装成函数,方便使用。

一、分类

1、多条件判断

本身没有难度,就是写起来繁琐,这里做个模板,方便复制和粘贴。

def fill_data_category(row):
    if row['无线协议'] == 'Wi-Fi 5' and row['带宽'] == 80:
        return 'C1'
    elif row['无线协议'] == 'Wi-Fi 6' and row['频段'] == '2.4G' and row['带宽'] == 20:
        return 'C2'
    elif row['无线协议'] == 'Wi-Fi 6' and row['频段'] == '5G' and row['带宽'] == 80:
        return 'C3'
    else:
        return '其他'

二、分组聚合

1、单列或者多列聚合

关键在构建agg_dict,conditions 和target_col只有一个元素时可以写成字符串而不是列表。但是只有一个统计方法也要写成列表 例如 agg_dict={“电平”:[“mean”]} 不能写成agg_dict={“电平”:“mean”}否则列名会出错。

原因为

df.columns = df.columns.map(lambda x: '-'.join(x) if '' not in x else x[0])

是处理复核索引表头,如果写成会字符串则无法形成复合索引导致表头错误。

常见的agg_dict方法
1、单列多个统计 agg_dict={“列名”:[“mean”,“sum”,“count”]}
2、多列单个统计,统计方式一样 lst_c 为列名列表,agg_dict= {col: [“mean”] for col in lst_c}
3、多列多个统计,统计方式一样 lst_c 为列名列表,agg_dict= {col: [“mean”, “sum”] for col in lst_c}
4、多列多个不同的统计。

#要分组的字段
conditions = "频段"
#分组后要聚合计算的列
target_col="电平"
#聚合字典,字段和聚合方法的对应关系
agg_dict={"电平":["mean"]}

def df_groupby(df,conditions,target_col,agg_dict):
    df = df.groupby(conditions).agg(agg_dict)
    df=df.reset_index()
    #修改列名,让表头变为   列名和统计方法使用“-”相连,而不是原来的符合索引
    df.columns = df.columns.map(lambda x: '-'.join(x) if '' not in x else x[0])
    return df

3、聚合成一条数据

各需要聚合的列,先组成字符串在聚合

def groupby_s(df,conditions,target_col,aggregation):
    df["group_col"] = df[conditions].astype(str).apply(lambda x: '/'.join(x), axis=1)
    df = df.groupby("group_col").agg({ target_col: aggregation })
    df=df.reset_index()
    col_name=["group_col"]+aggregation
    df.columns=col_name
    return df

三、数据透视表

index=[‘频段’,“带宽”]
values=‘电平’
columns=‘测试场景’
agg=“mean”
index和agg既可以是单独的字段也可以是列表

def df_pivot(df, index, values, columns,agg):
    df = pd.pivot_table(df, values=values, index=index, columns=columns, aggfunc=agg)
    df=df.reset_index()
    return df

四、加权平均数

计算加权平均数,权重是频数

def weighted_average(series):
    # 计算每个值的数量
    value_counts = dict(series.value_counts())
    # 计算总数
    total_count = len(series)
    # 初始化加权和为0
    weighted_sum = 0
    # 使用for循环遍历dict的每个值,并计算加权和
    for key, value in value_counts.items():  # 添加`.items()`以正确遍历字典
        weighted_sum += key * value
    # 计算加权平均数
    weighted_ave = weighted_sum / total_count
    return weighted_ave
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风暴之零

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值