我有以下数据框(仅提取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
答案 0 :(得分:0)
如果要比较原始列,请将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