我试图根据另一列来计算和列出一列中的唯一值,只要唯一计数大于 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 相当陌生,正在学习更复杂的布尔索引。对此的帮助将不胜感激!
您的逻辑是正确的,最简单的是在聚合后过滤行,例如使用
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