在我尝试学习Pandas的过程中,我有一项任务要解决,之前我曾在here上发布过一个问题,但现在我需要调整这个问题,以搜索基于date的值,而不是根据@jazrael友好地帮助我的行号进行计数。
基本上,我有如下数据格式:-
id food date mood
id 1 nuts 2018-11-12 high
id 2 potatoes 2018-11-13 low
id 4 bread 2018-11-13 high
id 5 fish 2018-11-14 high
id 6 nuts 2018-11-14 high
id 7 fish 2018-11-15 allergies
id 8 beer 2018-11-16 low
id 9 bread 2018-11-17 high
id 10 fish 2018-11-18 high
id 11 pasta 2018-11-19 allergies我希望在“心情”栏中搜索“过敏”,然后使用行中的“日期”值“过敏”值向后计算2天,并在“食物”栏中捕获所有相应的食物值(同时还会检测到行过敏的食物项目)。
因此,由此产生的数据可能如下(为了更好地理解这个问题,我将保留“日期”和“心情”栏):
id food date mood
id 2 potatoes 2018-11-13 low
id 3 fish 2018-11-13 high
id 4 bread 2018-11-13 high
id 5 fish 2018-11-14 high
id 6 nuts 2018-11-14 high
id 7 fish 2018-11-15 allergies
id 9 bread 2018-11-17 high
id 10 fish 2018-11-18 high
id 11 pasta 2018-11-19 allergies任何帮助都非常感谢!
云母
发布于 2020-01-22 13:19:27
解决方案类似于以前的answer,仅将GroupBy.transform与GroupBy.last一起用于allergies,减去2天数,并在boolean indexing中使用Series.ge进行筛选。
s = df['mood'].eq('allergies').iloc[::-1].cumsum()
df = df[df['date'].ge(df['date'].groupby(s).transform('last') - pd.Timedelta(2, unit='d'))]
print (df)
id food date mood
1 id 2 potatoes 2018-11-13 low
2 id 4 bread 2018-11-13 high
3 id 5 fish 2018-11-14 high
4 id 6 nuts 2018-11-14 high
5 id 7 fish 2018-11-15 allergies
7 id 9 bread 2018-11-17 high
8 id 10 fish 2018-11-18 high
9 id 11 pasta 2018-11-19 allergies细节
print (df['date'].groupby(s).transform('last'))
0 2018-11-15
1 2018-11-15
2 2018-11-15
3 2018-11-15
4 2018-11-15
5 2018-11-15
6 2018-11-19
7 2018-11-19
8 2018-11-19
9 2018-11-19
Name: date, dtype: datetime64[ns]https://stackoverflow.com/questions/59860451
复制相似问题