首页 > 解决方案 > 从 Etsy 对项目变体进行排序

问题描述

(我的第一篇文章)我查看了类似的问题,但令人惊讶的是找不到与我的问题相匹配的任何内容。

我正在寻找对我妻子的面具制作 etsy 商店的变异数据进行排序的最佳方法。她有许多面料颜色,每种颜色都有小号、中号和大号。

我已成功使用 split 函数将给定的“Variation”列分解为“color”和“size”

我今天在这里询问从这里构建这些数据的最佳/最有效的方法是什么。

例如;

颜色(1) #_small: 2 #_medium:3 #_large: 1

颜色(2) #_small: 1 #_medium:4 #_large: 2

等等,或者以其他方式,我假设其他一些企业为他们的传入订单做类似的事情,我也很想为我妻子的商店实施它。

到目前为止,我的代码是:

import pandas as pd
etsy = pd.read_csv(r"full_path.csv")
etsy['color'] = etsy.Variations.str.split(',', expand=True)[0]
etsy['size'] = etsy.Variations.str.split(',', expand=True)[1]
print(etsy[['color', 'size']])

此方法用于避免“键必须等于列错误”,因为客户能够在另一个通常包含逗号的变体部分中写个人评论。

目前的结果print(etsy[['color', 'size']])

                  color               size
0            Color:Black     Size:Adult M/L
1            Color:Black      Size:Adult XL
2        Color:Fern Grey   Size:Adult Small
3       Color:Blue Birds         Size:Adult
4  Color:Purple Hexagons  Size:KIDS (4~9yo)

标签: pythonsorting

解决方案


您可以使用.groupby('color')['size'].agg, 内部聚合,您可以使用它Counter来创建大小及其计数的字典。

from collections import Counter

df = pd.DataFrame({'color': ['blue', 'blue', 'blue', 'blue', 'blue','blue', 'red', 'red', 'red', 'red', 'red', 'red', 'red'], 'size': ['small', 'medium', 'small', 'medium', 'medium', 'large', 'small', 'medium','medium','medium','medium', 'large', 'large']})

>>> df
   color    size
0   blue   small
1   blue  medium
2   blue   small
...
10   red  medium
11   red   large
12   red   large


>>> df.groupby('color')['size'].agg(Counter)
color
blue    {'small': 2, 'medium': 3, 'large': 1}
red     {'small': 1, 'medium': 4, 'large': 2}
Name: size, dtype: object

推荐阅读