【发布时间】:2020-07-03 13:27:03
【问题描述】:
我有以下数据框。这里Name代表徽章的名称,Class代表徽章(1=Gold, 2=Silver, 3=Bronze)的等级。我想获得以下三类用户:
- 拥有金牌的用户(可能有也可能没有银牌和铜牌)
- 有银牌但没有金牌的用户(可能有也可能没有铜牌)
- 用户只有铜牌,没有银牌或金牌。
我已经编写了代码,但我认为它不正确。请给我一个方法来做到这一点。
数据帧
Id | UserId | Name | Date |Class | TagBased
2 | 23 | Autobiographer | 2016-01-12T18:44:49.267 | 3 | False
3 | 22 | Autobiographer | 2016-01-12T18:44:49.267 | 3 | False
4 | 21 | Autobiographer | 2016-01-12T18:44:49.267 | 3 | False
5 | 20 | Autobiographer | 2016-01-12T18:44:49.267 | 3 | False
6 | 19 | Autobiographer | 2016-01-12T18:44:49.267 | 3 | False
代码
df_gold_users = badges[(badges['Class'] == '1')]
df_silver_users = badges[(badges['Class'] != '1') & (badges['Class'] != '3')]
df_bronze_users = badges[(badges['Class'] != '1') & (badges['Class'] != '2')]
gold_users = df_gold_users['UserId'].value_counts().index
silver_users = df_silver_users['UserId'].value_counts().index
bronze_users = df_bronze_users['UserId'].value_counts().index
【问题讨论】:
-
你为什么不认为它是正确的?
-
因为 UserId 列没有唯一的用户值,所以值会根据获得的徽章数量重复。在第二行代码中,我提到不包括第 1 类用户,而是选择第 2 类用户,但可能会发生用户对第 1 类和第 2 类通用的情况。因此,即使我选择第 2 类用户我会自动选择 1 类用户。
-
你不能添加这是第二行吗:
(badges['Class'] != '1') & (badges['Class'] == '2')- 用户不是金牌,而是银牌。 -
可以,非常感谢。我还应该在第二行代码中包含 (badges['Class'] !='3') 吗?
标签: python python-3.x pandas dataframe pandas-groupby