catris25:
それでは、私はこのようなデータフレームを持っているとしましょう。
df = pd.DataFrame({'person':['A', 'A', 'B', 'B', 'A'],
'datetime':['2018-02-26 10:49:32', '2018-02-26 10:58:03', '2018-02-26 10:51:10','2018-02-26 10:58:45', '2018-02-26 10:43:34'],
'location':['a', 'b', 'c', 'd', 'e']})
それは示す
person datetime location
A 2018-02-26 10:49:32 a
A 2018-02-26 10:58:03 b
B 2018-02-26 10:51:10 c
B 2018-02-26 10:58:45 d
A 2018-02-26 10:43:34 e
それから私は、一人一人との時間に基づいてそれらをソート
df.sort_values(by=['person', 'datetime'])
これは自分の時間で、各人物の動きをソートします。
person datetime location
4 A 2018-02-26 10:43:34 e
0 A 2018-02-26 10:49:32 a
1 A 2018-02-26 10:58:03 b
2 B 2018-02-26 10:51:10 c
3 B 2018-02-26 10:58:45 d
これはAがになり、その後、場所のeから行く人として読み取ることができ、その後、Bに行きます。一方、Bさんは、場所dに続い場所cから行きます。
私はこのように、一人一人の動きを追跡するデータフレームを作成します。
| person | prev_datetime | prev_loc | next_datetime | next_loc |
|--------|---------------------|----------|---------------------|----------|
| A | 2018-02-26 10:43:34 | e | 2018-02-26 10:49:32 | a |
| A | 2018-02-26 10:49:32 | a | 2018-02-26 10:58:03 | b |
| B | 2018-02-26 10:51:10 | c | 2018-02-26 10:58:45 | d |
私は実際にこれを行うにはどのように任意のアイデアを持っていませんでした。ありがとうございました。
エズレル:
用途DataFrameGroupBy.shift
によって2列によると、最後の削除最後の重複行person
することにより、列Series.duplicated
とrename
列:
df['datetime'] = pd.to_datetime(df['datetime'])
df1 = df.sort_values(by=['person', 'datetime'])
df1[['next_datetime','next_loc']] = df1.groupby('person')['datetime','location'].shift(-1)
d = {'datetime':'prev_datetime','location':'prev_loc'}
df2 = df1[df1['person'].duplicated(keep='last')].rename(columns=d)
print (df2)
person prev_datetime prev_loc next_datetime next_loc
4 A 2018-02-26 10:43:34 e 2018-02-26 10:49:32 a
0 A 2018-02-26 10:49:32 a 2018-02-26 10:58:03 b
2 B 2018-02-26 10:51:10 c 2018-02-26 10:58:45 d