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

时间:2016-09-05 01:05:54

标签: python pandas

我有像这样的数据框

     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"。

当我总结所有关键元素然后放弃时,它会消耗很多时间....

1 个答案:

答案 0 :(得分:1)

一种选择是使用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

它就像一个替换方法,将ab替换为d,在传递给groupby函数时将它们组合在一起。