2017-04-11 4 views
1

私は時間:分形式(例えば09:35)で時間を持つpandasデータフレームを持っています。そして、B列のconsequtive時間の違いを取得したいのですが、 A列。Pythonで時間を減算する方法

データは次のようになります。

 A  B 
1  key1  00:00 
2  key1  00:03 
3  key1  00:06 
4  key2  00:00 
5  key2  00:06 
6  key2  00:05 

またはこのような何か:

 A  B 
1  key1  0 
2  key1  3 
3  key1  6 
4  key2  0 
5  key2  6 
6  key2  5 

私はケース内のデータを知っている出力はこのようなものでなければなりません

 A  B 
1  key1  09:12 
2  key1  09:15 
3  key1  09:21 
4  key2  10:21 
5  key2  10:27 
6  key2  10:32 

B列は整数であるので、次のようにすることができます。

df['B'] = df.groupby('A')['B'].diff().fillna(0).astype(int) 

ただし、B列のデータは整数ではなく、時刻形式です。

この問題を解決するための助けに感謝します。

答えて

1

計画

  • Timestamp秒に%H:%M形式を変換するためにpd.to_datetimeを使用しています。はい、日付が間違っています。しかし、それは我々がdiff
  • groupby'A'を使用し、一度は問題と再びTimedelta
  • 使用pd.to_datetimeに変身するので、我々は戻って'%H:%M'

pd.to_datetime(df.B).groupby(df.A).diff().fillna(0) 

1 00:00:00 
2 00:03:00 
3 00:06:00 
4 00:00:00 
5 00:06:00 
6 00:05:00 
Name: B, dtype: timedelta64[ns] 
から dt.strftimeとフォーマットを使用することができます diffを使用することはありません
pd.to_datetime(
    pd.to_datetime(df.B).groupby(df.A).diff().fillna(0) 
).dt.strftime('%H:%M') 

1 00:00 
2 00:03 
3 00:06 
4 00:00 
5 00:06 
6 00:05 
Name: B, dtype: object 

pd.to_datetime(df.B) \ 
    .groupby(df.A).diff() \ 
    .fillna(0).dt.total_seconds() \ 
    .div(60).astype(int) 

1 0 
2 3 
3 6 
4 0 
5 6 
6 5 
Name: B, dtype: int64 
+0

お返事ありがとうございます。ただし、A列は考慮していません。 –

関連する問題