在'pandas'中获取一个变量相对于另一个变量为True的比例

2 投票
1 回答
762 浏览
提问于 2025-04-17 21:42

我有一个数据表(dataframe),里面有一列叫'A',还有一列是布尔值(也就是只有真和假)叫'B'。我想找出'A'列中那些行的值,前提是至少有n行的'B'列是True。

我想到的最接近的方法是

df.query('B == True')['A'].value_counts()

然后看看这些数字,找出哪些大于n。

有没有更简洁(或者说更优雅)的方式来做到这一点呢?比如说,能不能只返回那些计数大于n的值,或者返回True的比例?

1 个回答

1

这听起来像是一个过滤器:

In [11]: df = pd.DataFrame([[1, True], [1, True], [2, False], [2, True]], columns=['A', 'B'])

In [12]: g = df.groupby('A')

In [13]: g.filter(lambda x: x['B'].sum() > 1)
Out[13]: 
   A     B
0  1  True
1  1  True

如果你想找出只有在这个条件为真的情况下A的值,可以使用求和的聚合方法:

In [21]: res = g.B.sum() > 1

In [22]: res[res]
Out[22]: 
A
1    True
Name: B, dtype: bool

In [23]: res[res].index
Out[23]: Int64Index([1], dtype='int64')

撰写回答