熊猫-使用groupby并在多种条件下进行过滤

时间:2019-07-26 00:52:15

标签: python pandas

我正在尝试按ID分组数据集,然后按时间分组。然后,我想根据一列的标准和ID的时间来选择记录。

我已经研究和玩了几个小时,但是我没有运气。

df = pd.DataFrame({'a': ['A1', 'A1', 'A1', 'A2', 'A2','A3','A3', 'A4', 'A3', 'A2', "A4", "A4", "A4"],
                   'value': ["7:00","10:00","20:00","9:00","7:00","9:00","8:00","15:00","19:00", "9:30", "15:30", "16:00", "16:30"],
                   "value2": [3,1,2,4,2,3,3,5,3,2,1,5,7],
                   'value3': ["Apple", "Orange", "Apple", "Kiwi", "Orange", "Orange", "Apple", "Apple", "Apple", "Apple", "Orange", "Orange","Apple"],
                  "value4": ["Throw", "Eat", 'Throw', "Keep", "Eat", "Eat", "Throw", "Throw", "Throw", "Throw", "Eat", "Eat", "Chuck"]})

df["value"] = pd.to_datetime(df["value"])

已更新:

我想要的是:1)通过ID(变量“ a”),在“ value3”下选择所有实例,其中“ value3”是“ orange”,然后是“ apple”。他们不必背对背。两者之间可以有许多其他值。但是橙色必须在苹果之前及时出现。

2)然后计算这些实例,但是:

3)在“值2”下,您会注意到有时与“橙色”关联的是“ 1”。我有两个组要计算这种“先有橙再有苹果”的模式:1)一组是value2为= 1时表示橙色;另一个是当橙色不等于1时(因此其余的都归为一组)。

1 个答案:

答案 0 :(得分:0)

我们需要groupby + shift

df.loc[(df.groupby(["a"]).value2.shift()+df.value2).eq('OrangeApple'),'a']
Out[287]: 
2    A1
6    A3
9    A2
Name: a, dtype: object


df.loc[(df.groupby(["a"]).value2.shift()+df.value2).eq('OrangeApple'),'a'].nunique()
Out[288]: 3