python - 从 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)
解决方案
您可以使用.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
推荐阅读
- php - laravel 如何匹配路由优先级
- c# - 将构建工件复制到 Docker 映像
- react-native - 从标题 react-navigation 中删除返回按钮
- emacs - 如何在emacs org模式下计算子树的字符?
- php - 另一个函数中的 PHP 函数不能引用`$this`
- javascript - 如何在 laravel 应用程序中配置 webpack-dev-server?
- python - 自动调整 tkinter 窗口大小以适应所有小部件
- r - 以闪亮的应用程序形式保存答案
- ruby - rails 5:提交表单时我没有收到任何错误,但我的数据没有存储在数据库中。为什么?
- bazel - 如何查询 bazel 测试使用的数据文件列表