首页 > 解决方案 > 根据列值选择用户 - 熊猫数据框

问题描述

我在选择符合我的数据框中某些条件的 ID 时遇到问题。这是问题所在:我的数据框如下所示:

index    ID    score_1   score_2   ...
   0     22      0          0
   1     22      0          0
   2     22      0          0
   3     23      1          0
   4     23      1          0 
   5     23      1          0
   6     24      0          0
   7     24      0          0
   8     24      0          1
   10    25      0          0
   11    25      0          0
   12    26      0          1
   13    26      0          1

我想要做的是获取具有以下内容的 ID 数量:

每个 ID 应仅出现在其中一个组中。

我尝试使用条件过滤和 groupby,但后来我得到重复的 ID,因为它只选择单行,而不是“记住”用户。我试过的一些代码:

# Create a df with only IDs that have score_1 == 0, group by `ID`
zero_IDs = df[df['score_1'] == 0].groupby(by = 'ID').nunique()
# 'Count' the number of IDs that have only one type of `score_2`
# But this does not differentitate between `0` or `1` values for score_2 column
zero_IDs[(zero_IDs['score_2'] == 1)].shape[0] 
# 'Count' the number of IDs that have at leat one `score_2 == 1`
zero_IDs[(zero_IDs['score_2'] > 1)].shape[0] 

你能帮我解决这个问题吗?

标签: pythonpandasnumpydataframeconditional

解决方案


这样的事情怎么样?结果是 [22 25] [24] [26]。

dfsum = df.groupby('ID').sum()
case1 = dfsum[(dfsum.score_1==0) & (dfsum.score_2==0)].index
case2 = dfsum[(dfsum.score_1==0) & (dfsum.score_2>0) &  (dfsum.score_2<df.groupby('ID').count().score_2)].index  
case3 = dfsum[(dfsum.score_1==0) & (dfsum.score_2>0) &  (dfsum.score_2==df.groupby('ID').count().score_2)].index
print(case1.values)
print(case2.values)
print(case3.values)

推荐阅读