复杂的组由几个具有相似前缀的列,同时根据列中的分类值取和(Pandas)

ymdaylpp  于 2023-06-20  发布在  其他
关注(0)|答案(2)|浏览(80)

如果前缀相似,我会查看groupby几列,并根据一列内的分类值计算总和。

数据

name      type    size
AA:3400            5
AA:3401   FALSE    1
AA:3402   FALSE    2
AA:3404   FALSE    0
AA:3409   FALSE    1
AA:3410   FALSE    8
AA:3412   FALSE    9
BB:3400   TRUE     4
BB:3401   FALSE    7

期望

name    type    size
AA      TRUE    0
AA      FALSE   21
AA              5
BB      TRUE    4
BB      FALSE   7
BB

df.groupby(['name', 'type'], dropna=False, as_index=False)['size'].sum()

但是,如果值具有相同的前缀,我该如何分组?任何建议都很感激。

nimxete2

nimxete21#

您可以尝试:

out = (
    df.assign(type= df["type"].astype(
        pd.CategoricalDtype(["TRUE", "FALSE"], ordered=True)))
      .groupby([df["name"].str.split(":").str[0], "type"],
               dropna=False, group_keys=False)["size"].sum().reset_index()
)

输出:

print(out)

  name   type  size
0   AA   TRUE     0
1   AA  FALSE    21
2   AA    NaN     5
3   BB   TRUE     4
4   BB  FALSE     7
5   BB    NaN     0
gywdnpxw

gywdnpxw2#

就像@Timeless解决方案一样,我会这样做:

df['type'] = df['type'].astype('category')
df_out = df.groupby([df['name'].str[:2], 'type'], 
                    dropna=False, 
                    observed=False)['size'].sum().reset_index()
print(df_out)

输出:

name   type  size
0   AA  False    21
1   AA   True     0
2   AA    NaN     5
3   BB  False     7
4   BB   True     4
5   BB    NaN     0

相关问题