【发布时间】:2017-02-15 14:12:40
【问题描述】:
我有以下熊猫数据框。
import pandas as pd
# Initialize dataframe
df1 = pd.DataFrame(columns=['bar', 'foo'])
df1['bar'] = ['001', '001', '001', '001', '002', '002', '003', '003', '003']
df1['foo'] = [-4, -3, 2, 3, -3, -2, 0, 1, 2]
>>> print df1
bar foo
0 001 -4
1 001 -3
2 001 2
3 001 3
4 002 -3
5 002 -2
6 003 0
7 003 1
8 003 2
考虑以下阈值和参数。
# Provide threshold and number of entries above and below threshold
threshold = 0
n_below = 2
n_above = 2
我想创建一个过滤掉 bar 某些值的数据框。我要过滤掉的bar 如下:如果它没有至少n_below 值foo 小于threshold 和n_above 值foo 大于threshold。
对于上面的例子:
- 不会过滤掉组
bar = 001,因为对于bar = 001,至少有n_below = 2的n_below = 2条目小于threshold = 0,并且至少n_above = 2的foo条目大于@ 987654338@。 -
bar = 002组将被过滤掉,因为对于bar = 002,foo的至少n_above = 2条目不大于threshold = 0。 -
bar = 003组将被过滤掉,因为对于bar = 003,foo的至少n_below = 2条目不小于threshold = 0。
所需的输出如下:
# Desired output
bar foo
0 001 -4
1 001 -3
2 001 2
3 001 3
我相信这可以通过 GroupBy 和 .count() 来完成,但是我一直无法获得有效的解决方案。我认识到编写一个分两步执行此操作的解决方案可能更简洁:1)首先过滤以满足n_below 条件; 2)然后过滤以满足n_above条件。
【问题讨论】: