栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Pandas-记录-DataFrame个体到组别维度数据聚合并生成新字段

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Pandas-记录-DataFrame个体到组别维度数据聚合并生成新字段

背景

  • 当前有如图三个字段:
    “尺码系数”、“颜色汇总尺码系数”、“比例”
  • 现已知这三个字段的数学关系:
    SUM(“尺码系数”) GROUP BY “颜色” = “颜色汇总尺码系数”
    “尺码系数” / “颜色汇总尺码系数” = “比例”

-现Dataframe为商品维度,维度关系为 商品:颜色 = n:1
-已存在“尺码系数”字段,需新增“颜色汇总尺码系数”、“比例”两个字段

实现

假设Dataframe 为 df
已存在字段为[‘商品’,‘颜色’,‘尺码系数’]

df = pd.Dataframe(columns=['商品', '颜色', '尺码系数'], datas=datas]
colour_size_factor_sum = df.groupby('颜色')['尺码系数'].sum()
df_colour_size_factor_sum = pd.Dataframe({"颜色汇总尺码系数": colour_size_factor_sum }).reset_index()
df = pd.merge(df, df_colour_size_factor_sum, how='left', on='颜色')
步骤拆分
  1. 按“颜色”分组对“尺码系数”聚合后得到Series,其中“颜色”为索引列,“尺码系数”(聚合)为数据
    colour_size_factor_sum = df.groupby('颜色')['尺码系数'].sum()
    print(colour_size_factor_sum)
    print(type(colour_size_factor_sum))

打印结果如下

print(colour_size_factor_sum)

print(type(colour_size_factor_sum))

  1. 创建Dataframe读取字典数据,key值命名为“颜色汇总尺码系数”,value对应聚合好的“尺码系数”即colour_size_factor_sum
    df_colour_size_factor_sum = pd.Dataframe({"颜色汇总尺码系数": colour_size_factor_sum}).reset_index()
    print(df_colour_size_factor_sum )

print(df_colour_size_factor_sum )

其中reset_index()的作用为重置索引,可以对比一下不用reset_index()的输出结果

    df_colour_size_factor_sum = pd.Dataframe({"颜色汇总尺码系数": colour_size_factor_sum})
    print(df_colour_size_factor_sum )
    print(df_colour_size_factor_sum['颜色'])

print(df_colour_size_factor_sum )

尝试输出一下print(df_sku_colour_size_factor_sum[‘sku颜色’])

上图看到的"颜色"那一列不是因为错行了,而是它本身就是一个索引列,因此调用“颜色”列的时候报错
即reset_index()在此处重置了数据的索引,而原索引列保留,并且索引列的名称“颜色”并没有被识别为数据,而是作为列名存储了下来

  1. pd.merge 关联匹配数值
df = pd.merge(df, df_colour_size_factor_sum, how='left', on='颜色')

这块就没什么好说的了,就是个LEFT JOIN,只不过pandas的merge需要注意的是:

  • 如果你使用LEFT JOIN的时候,ON的对象在右表不是唯一索引的话,就会出现匹配完后,主表的数据增加的现象(一定要确保ON的字段在非主表为唯一索引)
结束语

工作中偶尔用到了,自己用的一个比较麻烦的方法,姑且能解决问题
目前所学知识没找到更好的方法实现,如果有更好的方法希望大家分享一下~

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/341536.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号