2016-06-14 205 views
-6

我想比較S.No.不同行的,如果是同樣的話,我想計算日期時間差和打印的詳細信息。(如果日期時間的差異是不可能的,那麼唯一的日期的差異也將被罰款。)Python - 如何比較一行的列值與下一行的值

輸入

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

我投票關閉這個問題

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] 

輸出作爲題外話,因爲是SO不是代碼編寫服務,請顯示您的努力以及期望的輸出結果如何 – EdChum

回答

0

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

假設你輸入保存在一個數據幀大熊貓(或等價保存到CSV和使用pandas.read_csv讀取它)。 現在你可以在循環使用同一S.No值羣組進行以下:以上

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']} 
+0

感謝Flab,groupby正在工作。這是一個很好的幫助,因爲我在C上工作,所以我的方法完全不同。我有大數據,如果我使用print語句,那麼我又陷入困境,因此我正在考慮將值傳遞給新的數據框,然後將該df寫入csv文件。 – deega

+0

這是我的嘗試,但它不工作的關鍵,組在df.groupby('S.No。')a.append(組)我也嘗試過a.iloc(組),但無論我得到空的數據框或只是標題的重複... – deega

+0

已更新的答案顯示可能的實現。如果你有大數據,你可能想找到一種方法來優化... – FLab

相關問題