【问题标题】:Python - How to Compare a column value of one row with value in next rowPython - 如何将一行的列值与下一行的值进行比较
【发布时间】:2016-10-14 18:18:12
【问题描述】:

我想比较一下 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

【问题讨论】:

  • 我投票决定将此问题作为离题结束,因为 SO 不是代码编写服务,请展示您的努力以及所需的输出是什么样的

标签: python pandas


【解决方案1】:

使用 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']}

【讨论】:

  • 感谢 Flab,groupby 正在工作。这是一个很大的帮助,因为我曾在 C 上工作过,所以我的方法完全不同。我有大数据,如果我使用 print 语句,那么我会再次陷入困境,所以我正在考虑将值传递给一个新的数据框,然后将该 df 写入 csv 文件。
  • 这是我尝试过的方法,但它不适用于 df.groupby('S.No.') a.append(group) 中的密钥组,我也尝试了 a.iloc(group) 但要么我得到空数据框或只是标题的重复......
  • 更新了答案以显示可能的实现。如果您有大数据,您可能想找到一种优化方法...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-28
  • 2013-03-03
  • 1970-01-01
  • 1970-01-01
  • 2021-11-05
  • 1970-01-01
相关资源
最近更新 更多