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

时间:2016-06-14 06:49:32

标签: 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 

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

1 个答案:

答案 0 :(得分:0)

使用groupby(http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.groupby.html

假设您的输入保存在pandas Dataframe中(或等效地将其保存到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']}