我有以下数据帧(仅提取一个id3值(:
id1 id2 id3 id4 id5 id6 status id7 max_snsr_ts max_ts_fs k
292 346 1041 656 578 5780 on 53 10/21/2020 23:59 10/22/2020 23:30 48
292 346 1041 657 708 7080 on 53 10/21/2020 23:59 10/22/2020 23:30 48
292 346 1041 658 579 5790 on 53 10/19/2020 23:59 10/22/2020 23:30 48
292 346 1041 657 708 5780 on 53 10/21/2020 23:59 10/23/2020 23:30 96
292 346 1041 658 579 7080 on 53 10/19/2020 23:59 10/23/2020 23:30 96
292 346 1041 656 578 5790 on 53 10/21/2020 23:59 10/23/2020 23:30 96
我试图按id3分组,选择max_ts列的最小值,然后将其与每组id3和k的max_ts_fs进行比较。根据结果,我想添加一个布尔值作为单独的列。
我试着做如下:
joined_h_raw_fs['new_col'] = np.where(joined_h_raw_fs.groupby(['id3'])['max_snsr_ts'].min().min() > joined_h_raw_fs.groupby(['id3', 'k'])['max_ts_fs'] , True, False)
期望得到:
id1 id2 id3 id4 id5 id6 status id7 max_snsr_ts max_ts_fs k new_col
292 346 1041 656 578 5780 on 53 10/21/2020 23:59 10/22/2020 23:30 48 FALSE
292 346 1041 657 708 7080 on 53 10/21/2020 23:59 10/22/2020 23:30 48 FALSE
292 346 1041 658 579 5790 on 53 10/19/2020 23:59 10/22/2020 23:30 48 FALSE
292 346 1041 657 708 5780 on 53 10/21/2020 23:59 10/23/2020 23:30 96 FALSE
292 346 1041 658 579 7080 on 53 10/19/2020 23:59 10/23/2020 23:30 96 FALSE
292 346 1041 656 578 5790 on 53 10/21/2020 23:59 10/23/2020 23:30 96 FALSE
但我得到了以下错误:
... last 1 frames repeated, from the frame below ...
pandas/_libs/tslibs/c_timestamp.pyx in pandas._libs.tslibs.c_timestamp._Timestamp.__richcmp__()
RecursionError: maximum recursion depth exceeded in comparison
我仍然不是很擅长熊猫,因为我正在从dplyr过渡。
有人能指出我做错了什么吗?
BR
如果要比较原始列,请将GroupBy.transform
用于具有相同大小的系列,如由聚合值填充的原始列,这里也不需要np.where
。
s1 = joined_h_raw_fs.groupby(['id3'])['max_snsr_ts'].transform('min')
s2 = joined_h_raw_fs.groupby(['id3', 'k'])['max_ts_fs'].transform('min')
joined_h_raw_fs['new_col'] = s1 > s2