熊猫一组一组地聚集和过滤奇怪的行为



我正在尝试根据一些聚合度量筛选数据集:我需要找到执行了5到15笔交易的UserID,或者它们的平均付款在0到1500之间。这是我的代码:

grouped_count = dataset.groupby('UserID').size()
user_count = grouped_count[(grouped_count >= 5) & (grouped_count <= 15)]

grouped_mean = dataset.groupby('UserID').mean()
user_mean = grouped_mean[(grouped_mean['Amount'] >= 0.0) & (grouped_mean['Amount'] <= 1500.0)]

计数部分似乎很好,但我对平均部分有一些担忧:groupby().mean()似乎运行正确,但过滤部分会生成一些行,显示NaN值,而这些行应该被丢弃。

> grouped_mean
Amount      Authorized
UserID 
1        64.640000             1.0
2       750.000000             1.0
3       696.762857             1.0
4       424.666667             1.0
5       446.847500             1.0
...            ...             ...
58504   662.950000             1.0
58505  1578.008750             1.0
58506  2990.800848             1.0
58507    71.190000             1.0
58508    20.000000             1.0
[58508 rows x 2 columns]
> user_mean
Amount      Authorized
UserID                                                      
1       64.640000             1.0
2      750.000000             1.0
3      696.762857             1.0
4      424.666667             1.0
5      446.847500             1.0
...           ...             ...
58504  662.950000             1.0
58505         NaN             1.0
58506         NaN             1.0
58507   71.190000             1.0
58508   20.000000             1.0
[58508 rows x 2 columns]

我怎样才能得到我需要的结果?我可以添加一个user_mean = user_mean.dropna(subset='Amount')吗?或者有更好的方法在分组和聚合后进行过滤吗?

事实上,Scott Boston在评论中的解决方案解决了这个问题。在计算平均值之前,必须选择相关列。

最新更新