Pandas groupby,聚合和过滤奇怪的行为
Pandas groupby, aggregate and filter strange behavior
我正在尝试根据一些聚合指标过滤数据集:我需要找到执行了 5 到 15 笔交易或者他们的平均付款在 0 到 1500 之间的 UserID
。
这是我的代码:
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在评论中的解决方案解决了问题。在计算平均值之前必须选择相关列。
我正在尝试根据一些聚合指标过滤数据集:我需要找到执行了 5 到 15 笔交易或者他们的平均付款在 0 到 1500 之间的 UserID
。
这是我的代码:
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在评论中的解决方案解决了问题。在计算平均值之前必须选择相关列。