Pandas 计算一列中 True/False 值的数量,以获得另一列的唯一集/分组

问题描述 投票:0回答:1

我试图根据另一列来计算和列出一列中的唯一值,只要唯一计数大于 2。我引用了这篇文章,它已经让我部分实现了这一点,但需要了解如何进一步过滤 UniqueNum 。 (参考:如何根据 Pandas 中另一列中的值按组计算一列中的唯一值

key_id = {1008,1051,1003,1005,1072,1079,1092,1093,1004,2000}

(filtData.loc[(filtData['colC'] > 0) & (filtData['colB'].isin(key_id)),'colB']
    .groupby(filtData['colA'])
    .agg(UniqueNum='nunique')
    .reset_index())
# Above .loc might need additional booleans to include only uniqueNum greater than 2

电流输入:

           colA  colB       colC
0        1105904         1007   867.000000
1        1105904         1008    93.330002
2        1105904         2000     0.420000
3        1105904         1004     0.000000
4        1105904         1005     4.000000
5        1105905         1008     4.000000
6        1105905         1001     0.000000
7        1105905         1004     0.000000
8        1105905         1005     1.500000
9        1105905         1072     4.000000
10       1105905         1093     0.250000
11       1111111         1001     0.350000
12       1111111         1002     0.100000
13       1111111         1003     0.000000
14       1111111         1004     0.250000
15       1111111         1093     0.250000

所需输出:

    colA    UniqueNum
0   1105904 3
1   1105905 4

# colA value 1111111 should not show up because the unique number count is not greater than 2. 

一旦实现了所需的输出,我们希望将 colA 中的唯一值放入一个集合中。然后,使用过滤后的值创建一个 CSV,其中包括 colA、colB、colC,其中条件:colB 值必须在 key_id 中找到,colC 值大于 0,并且 key_id 中包含的与 colC 值关联的 colB 值的计数大于大于 0 的计数大于 2。我认为这可能是聚合修改。附带说明一下,我对 Pandas 相当陌生,正在学习更复杂的布尔索引。对此的帮助将不胜感激!

python pandas boolean multiple-columns aggregation
1个回答
0
投票

您的逻辑是正确的,最简单的是在聚合后过滤行,例如使用

query

key_id = {1008,1051,1003,1005,1072,1079,1092,1093,1004,2000}

(filtData.loc[(filtData['colC'] > 0) & (filtData['colB'].isin(key_id)),'colB']
    .groupby(filtData['colA'])
    .agg(UniqueNum='nunique')
    .reset_index()
    .query('UniqueNum > 2')
)

输出:

      colA  UniqueNum
0  1105904          3
1  1105905          4
© www.soinside.com 2019 - 2024. All rights reserved.