- 当前有如图三个字段:
“尺码系数”、“颜色汇总尺码系数”、“比例” - 现已知这三个字段的数学关系:
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='颜色')步骤拆分
- 按“颜色”分组对“尺码系数”聚合后得到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))
- 创建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()在此处重置了数据的索引,而原索引列保留,并且索引列的名称“颜色”并没有被识别为数据,而是作为列名存储了下来
- pd.merge 关联匹配数值
df = pd.merge(df, df_colour_size_factor_sum, how='left', on='颜色')
这块就没什么好说的了,就是个LEFT JOIN,只不过pandas的merge需要注意的是:
- 如果你使用LEFT JOIN的时候,ON的对象在右表不是唯一索引的话,就会出现匹配完后,主表的数据增加的现象(一定要确保ON的字段在非主表为唯一索引)
工作中偶尔用到了,自己用的一个比较麻烦的方法,姑且能解决问题
目前所学知识没找到更好的方法实现,如果有更好的方法希望大家分享一下~
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)