我正在尝试按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时(因此其余的都归为一组)。
答案 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