从带有分类值的熊猫系列中获取总和

时间:2021-03-28 00:33:08

标签: python pandas

我目前正在处理一个包含 T 恤订单信息的数据框,其中我有一个如下所示的系列:

User::cursor()->chunk(10000);

这些数据点是手动输入的,我正在寻找一种方法来查找特定大小的项目总和,即。我想找到所有 s、所有 m 等的总和。 Atm 我有点不确定如何进行;我正在考虑拆分每个条目并进行一些编码,然后使用 groupbys。

2 个答案:

答案 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 为这个问题留下了很好的答案,但也许对于新用户来说,阐明正在发生的事情也很有用

  1. 我们想使用从 Series.str.extractall() 中提取的一些正则表达式来捕获匹配的组,这里的组是(1 个或多个数字)后跟(1 个或多个字母)。如果extractall 找到多个匹配项,则将这些匹配项写入新行,并带有一个索引,说明它是哪个匹配号

  2. 重置索引摆脱了“匹配索引”,当然你可以重命名列并适当地格式化值

>>> 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
相关问题