Python—如何将一行的列值与下一行的值进行比较
我想比较一下S.No。对于不同的行,如果相同,则我要计算日期时间差并打印详细信息。(如果日期时间差不可能,则只有日期差也可以。) 输入Python—如何将一行的列值与下一行的值进行比较,python,pandas,Python,Pandas,我想比较一下S.No。对于不同的行,如果相同,则我要计算日期时间差并打印详细信息。(如果日期时间差不可能,则只有日期差也可以。) 输入 S.No. Datetime Details 1 2010/6/7 19:01 asd 1 2010/6/8 4:00 dfg 2 2010/6/9 0:00 dfg 2 2010/6/10 0:00 gfd 2 2010/6/11 0:00 gfd 3 2010/6/12 0:00 gfd
S.No. Datetime Details
1 2010/6/7 19:01 asd
1 2010/6/8 4:00 dfg
2 2010/6/9 0:00 dfg
2 2010/6/10 0:00 gfd
2 2010/6/11 0:00 gfd
3 2010/6/12 0:00 gfd
3 2010/6/13 0:00 abc
4 2010/6/14 0:00 abc
4 2010/6/15 0:00 def
预期产量
1 0.3 asd dfg
2 1 dfg gfd
2 1 gfd gfd
3 1 gfd abc
4 1 abc def
使用groupby()
假设您的输入保存在pandas数据框中(或等效地将其保存到csv中,并使用pandas.read_csv读取)。
现在,您可以使用相同的S.No值在组上循环,如下所示:
output = {}
for key, group in df.groupby('S.No.'):
# print key
# print group
output[key] = {}
output[key]['Details'] = group['Details'].values.tolist()
output[key]['Date Time Diff'] = pd.to_datetime(group['Datetime']).diff().iloc[-1]
上述各项的产出
1 {'Date Time Diff': Timedelta('0 days 08:59:00'), 'Details': ['asd', 'dfg']}
2 {'Date Time Diff': Timedelta('1 days 00:00:00'), 'Details': ['dfg', 'gfd', 'gfd']}
3 {'Date Time Diff': Timedelta('1 days 00:00:00'), 'Details': ['gfd', 'abc']}
4 {'Date Time Diff': Timedelta('1 days 00:00:00'), 'Details': ['abc', 'def']}
我投票结束这个问题,因为SO不是一个代码编写服务,请展示你的努力和期望的输出是什么样子的Ethanks Flab,groupby正在工作。这是一个很大的帮助,因为我在C上工作过,所以我的方法完全不同。我有大数据,如果我使用print语句,那么我会再次陷入困境,因此我考虑将值传递到一个新的数据帧,然后将df写入csv文件。这是我尝试的方式,但对df.groupby('S.No.)中的key,group不起作用a.append(group)我也尝试了a.iloc(group),但要么我得到的是空数据帧,要么只是标题的重复…更新了答案以显示可能的实现。如果你有大数据,你可能想找到一种方法来优化。。。