Python—如何将一行的列值与下一行的值进行比较

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。对于不同的行,如果相同,则我要计算日期时间差并打印详细信息。(如果日期时间差不可能,则只有日期差也可以。)

输入

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),但要么我得到的是空数据帧,要么只是标题的重复…更新了答案以显示可能的实现。如果你有大数据,你可能想找到一种方法来优化。。。