【发布时间】:2021-03-15 21:28:28
【问题描述】:
我想找出至少有一行带有0.5 < C < 1.0 的组的大小。给定这样的数据框:
| A | B | C |
|---|---|---|
| 1 | 2 | 0.1 |
| 1 | 2 | 0.9 |
| 1 | 2 | 1.0 |
| 2 | 5 | 0 |
| 2 | 5 | 0.1 |
| 2 | 5 | 0.2 |
| 3 | 4 | 0.6 |
我希望看到类似以下内容的返回:
| A | B | Size |
|---|---|---|
| 1 | 2 | 3 |
| 3 | 4 | 1 |
我尝试了以下方法:
group = dataset.groupby(['A', 'B'])
filtered = group.filter(lambda x: 0.5 < x['C'] < 1.0)
filtered.size()
但是,我在第二行收到此错误:
ValueError:Series 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。
any() 函数在这种情况下是有意义的,因为我希望 C 的 any 值介于 0.5 和 1.0 之间以便计算该组,但我不知道在哪里拨打any() 电话。我尝试在 lambda 上调用它。我在filter() 之后尝试过。我尝试的任何方法都不起作用...
【问题讨论】:
-
@Kris 不会只给我返回
0.5 < C < 1.0的行吗?我希望 all 他们的组至少有一行0.5 < C < 1.0. -
如果你的左约束是
<=,你可以使用.between()。所以df["C"].between(0.5, 1, inclusive=False)
标签: python pandas dataframe pandas-groupby