如何在大熊猫中进行复杂条件的分组

海森堡

我有这样的数据框

     A    B    C
0    1    7    a
1    2    8    b
2    3    9    c
3    4   10    a
4    5   11    b
5    6   12    c

我想在下面得到groupby结果(键=列C);

    A    B
d  12   36

“ d”表示a或b,

所以我只想用“ a”和“ b”分组。

然后放在一起作为“ d”。

当我总结所有关键要素然后删除时,会花费很多时间...。

智慧

一种选择是使用pandas where转换C列,以便它在原位置ab变为原位置d,然后您可以对转换后的列进行分组并对其进行常规汇总,如果c不需要使用,则可以将其简单地放在摘要之后:

df_sum = df.groupby(df.C.where(~df.C.isin(['a', 'b']), "d")).sum().reset_index()

df_sum
#   C   A   B
#0  c   9   21
#1  d   12  36

df_sum.loc[df_sum.C == "d"]

#   C   A   B
#1  d   12  36

为了更清楚地了解该where子句的工作原理:

df.C.where(~df.C.isin(['a','b']), 'd')

# 0    d
# 1    d
# 2    c
# 3    d
# 4    d
# 5    c
# Name: C, dtype: object

它的作用就像一个替换方法和替换abd传递给时将被分组在一起groupby的功能。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章