Python 根据两列值合并和删除行
我有一个包含时间和位置的数据框,我希望合并具有相同日期和位置的行,以便最大时间将移到“to”列,并且我刚才使用其时间值的行将被删除 此外,如果时差大于3小时,则不会发生合并Python 根据两列值合并和删除行,python,pandas,Python,Pandas,我有一个包含时间和位置的数据框,我希望合并具有相同日期和位置的行,以便最大时间将移到“to”列,并且我刚才使用其时间值的行将被删除 此外,如果时差大于3小时,则不会发生合并 date from location to 01 16:25 A 02 17:15 B 02 19:11 C 02 19:19 C 02 17:48 B 03 16
date from location to
01 16:25 A
02 17:15 B
02 19:11 C
02 19:19 C
02 17:48 B
03 16:20 F
05 08:30 G
05 09:09 D
05 09:11 G
预期产出:
date from location to
01 16:25 A 16:25
02 17:15 B 17:48
02 19:11 C 19:19
02 19:19 C #this line will delete
02 17:48 B #this line will delete
03 16:20 F 16:20
05 08:30 G 08:30
05 09:09 D 09:09
05 09:11 G 09:11
我尝试了双for循环,但我确信有更好的python方法。
有什么想法吗?#示例数据帧
df=pd.DataFrame(
{
“日期”:[“01”、“01”、“01”、“01”、“02”、“02”],
“时间”:[“01:02”、“02:03”、“04:05”、“06:07”、“08:09”、“12:10”],
“地点”:[“A”、“A”、“B”、“B”、“C”、“C”],
}
)
#将时间列转换为日期时间
df[“time”]=pd.to_datetime(df[“time”],format=“%H:%M”)
#按日期和地点汇总
df=df.groupby([“日期”,“位置]).agg([“最小”,“最大]).reset_index()
#重命名列
df.columns=[“日期”、“位置”、“收件人”、“发件人”]
#找出差异>3的地方
df=df[(df['to']-df['from']).astype('timedelta64[h]').abs()为什么第一个G
位置行的to
值是8:30
?因为下一个位置不同所以第二个B
位置行被删除了?您的输出没有意义。首先是@AlexandreB的问题。第二个问题是C
的第1行为什么不是19:19
?这是在“第二个B
是这一天的下一个时间戳”组中,按照此逻辑,为什么要对两个G
行进行区分?它们也是同一天解决方案不考虑“3小时约束”如果你愿意,你可以在合并后过滤掉差异。我会编辑我的答案。我会更新它。一定是错过了你之前关于3小时限制的说明。
date location to from
0 01 A 01:02:00 02:03:00
1 01 B 04:05:00 06:07:00