pandas - 定位一列中的值,然后使用相应的日期戳搜索其他列
问题描述
我有一个任务要解决,因为我尝试学习 Pandas,并且之前在这里发布了一个问题,但现在需要调整它以根据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
我希望在 'mood' 列中搜索 'allergies',然后使用我们找到值 'allergies' 的行上的 'date' 值倒数 2 天,并在 food 列中捕获所有相应的食物值(同时还检测到对行过敏的食品)。
因此生成的数据框可能如下所示(我将保留“日期”和“心情”列以便更好地理解问题):-
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
非常感谢任何帮助!
麦克多尔
解决方案
解决方案与之前的答案类似,仅使用GroupBy.transform
with GroupBy.last
for date for allergies
,减去2
days 和 filter by Series.ge
in boolean indexing
:
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]
推荐阅读
- postgresql - 为什么 Id 使用 insert 增加了 2 而不是 1
- wordpress - Profile photo uploading successfully but not saving on profile
- flutter - Flutter Dio send multiple image in one array as multipart
- json - Swift:解码 json 响应
- python - 在带有更多空格的文本文件中对数据进行排序会在 python 中产生错误
- php - WooCommerce - 何时创建订单?
- r - tbl and mutate dplyr: incorrect formatting of variables
- python - 根据由另一列分组的列中不同值的数量创建新列
- python - Is there an efficient way to find all common substrings of 2 strings with mismatches allowed and designated length
- python - python 中的递归函数在第 2500 步停止,即使限制为 100000