2016-06-14 13 views
-6

S.No.それが同じである場合は、別の行で、私はdatetime型の違いとプリントの詳細を計算します。(日時差はその後、唯一の日付の差も大丈夫だと思うことができない場合。)期待Python - 1行の列値と次の行の値を比較する方法

入力

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

あなたの入力はパンダDATAFRAMEに保存されていると仮定(または同等に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(group)のグループのキーでは機能しません。a.iloc(グループ)を試みましたが、空のデータフレームを取得しているか、 ... – deega

+0

可能な実装を表示するための答えを更新しました。大きなデータがある場合は、最適化する方法を見つけたいかもしれません... – FLab

関連する問題