我有像这样的数据框
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"。
当我总结所有关键元素然后放弃时,它会消耗很多时间....
答案 0 :(得分:1)
一种选择是使用pandas
where
转换C列,以便a
或b
变为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
它就像一个替换方法,将a
和b
替换为d
,在传递给groupby
函数时将它们组合在一起。