pandas python groupby_python – 如何在Pandas groupby之后获得多个条件操作?

考虑以下示例:

import pandas as pd

import numpy as np

df = pd.DataFrame({'A' : ['foo', 'bar', 'foo', 'bar',

'foo', 'bar', 'foo', 'foo'],

'B' : [12,10,-2,-4,-2,5,8,7],

'C' : [-5,5,-20,0,1,5,4,-4]})

df

Out[12]:

A B C

0 foo 12 -5

1 bar 10 5

2 foo -2 -20

3 bar -4 0

4 foo -2 1

5 bar 5 5

6 foo 8 4

7 foo 7 -4

这里我需要为A中的每个组计算B中以C为条件的元素之和为非负(即,> = 0,基于另一列的条件).反之亦然C.

但是,我的代码失败了.

df.groupby('A').agg({'B': lambda x: x[x.C>0].sum(),

'C': lambda x: x[x.B>0].sum()})

AttributeError: 'Series' object has no attribute 'B'

所以似乎应用是首选(因为apply会看到我认为的所有数据帧),但不幸的是我不能使用带有apply的字典.所以我被困住了.有任何想法吗?

一个不那么漂亮的不那么有效的解决方案是在运行groupby之前创建这些条件变量,但我确信这个解决方案不会使用Pandas的潜力.

因此,例如,组栏和列B的预期输出将是

+10 (indeed C equals 5 and is >=0)

-4 (indeed C equals 0 and is >=0)

+5 = 11

另一个例子:

group foo和B列

NaN (indeed C equals -5 so I dont want to consider the 12 value in B)

+ NaN (indeed C= -20)

-2 (indeed C=1 so its positive)

+ 8

+NaN = 6

注意我使用NaN而不是零,因为如果我们要放零,则除了sum之外的其他函数会给出错误的结果(中位数).

换句话说,这是一个简单的条件求和,其中条件基于另一列.

谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值