我目前正在处理一个包含 T 恤订单信息的数据框,其中我有一个如下所示的系列:
User::cursor()->chunk(10000);
这些数据点是手动输入的,我正在寻找一种方法来查找特定大小的项目总和,即。我想找到所有 s、所有 m 等的总和。 Atm 我有点不确定如何进行;我正在考虑拆分每个条目并进行一些编码,然后使用 groupbys。
答案 0 :(得分:0)
如果你有数据框:
sizes
0 2 s
1 1 s 2 l
2 1 s 1 m
3 1 m 1 l
4 2 xl
5 1 s
6 1 m
7 1 s
8 1 m
9 1 m
10 1 m
11 1 s 1 xl
12 1xxl 1x 2xl
那么:
df = (
df["sizes"]
.str.extractall(r"(\d+)([\sa-z]+)")
.reset_index(drop=True)
.rename(columns={0: "count", 1: "size"})
)
df["size"] = df["size"].str.strip()
df["count"] = df["count"].astype(int)
print(df.pivot_table(columns="size", aggfunc="sum"))
打印:
size l m s x xl xxl
count 3 6 7 1 5 1
答案 1 :(得分:0)
我认为 andrej 为这个问题留下了很好的答案,但也许对于新用户来说,阐明正在发生的事情也很有用
我们想使用从 Series.str.extractall() 中提取的一些正则表达式来捕获匹配的组,这里的组是(1 个或多个数字)后跟(1 个或多个字母)。如果extractall 找到多个匹配项,则将这些匹配项写入新行,并带有一个索引,说明它是哪个匹配号
重置索引摆脱了“匹配索引”,当然你可以重命名列并适当地格式化值
>>> df
sizes
0 2 s
1 1 l
2 1 m 1 l
3 1xxl 1x 2xl
>>> df['sizes'].str.extractall(r"(\d+)([\sa-z]+)")
0 1
match
0 0 2 s
1 0 1 l
2 0 1 m
1 1 l
3 0 1 xxl
1 1 x
2 2 xl
>>> df['sizes'].str.extractall(r"(\d+)([\sa-z]+)").reset_index(drop=True)
0 1
0 2 s
1 1 l
2 1 m
3 1 l
4 1 xxl
5 1 x
6 2 xl