2017-08-03 1 views
0

私は、次のデータ型があります。往復に基づいて新しい出発点と新しい目的地を見つけるには?

id  start  end  count   Time    Trip 
001  Paris  London  01  2016-05-20 10:50:00  Yes 
015  Paris  London  01  2016-05-19 11:50:00  Yes 
002  Prague  Vienna  15  2016-05-18 17:55:00  No 
003  Frankfurt London  01  2016-05-17 21:15:00  Yes 
015  London  Paris   08  2016-05-21 13:50:00  No 
003  Barcelona Vienna  15  2016-05-19 03:20:00  No 
003  London  Barcelona  01  2016-05-18 06:45:00  Yes 
002  Vienna  Prague  15  2016-05-19 02:45:00  No 

私は自分のIDや時間によってグループデータをしたいと思いますが。

と往復を識別する。それは以下の条件を満足する場合要するに、最初の行の

1.「終了」の都市は、次の行の都市を「開始」に等しく、最初の行の

2.「スタート」街 "はに等しいです。

"new start"は最初の行の先頭で、 "new end"は最初の行の最後です。例えば

、それは往復でID 002、

002  Prague  Vienna  15  2016-05-18 17:55:00  No 
002  Vienna  Prague  15  2016-05-19 02:45:00  No 

を検討することができます。だから "新しいスタート"はプラハで、 "新しい終わり"はウィーンです。

ありがとうございました! ID 015

+0

の場合、最終データフレームには002のIDが2つ、ID 015のIDが2つありますか? – DJK

答えて

0

の場合と同じこれは私のアプローチ

id start  end count    Time Trip 
2 2 Prague Vienna  15 5/18/2016 17:55 No 
7 2 Vienna Prague  15 5/19/2016 2:45 No 
1 15 Paris London  1 5/19/2016 11:50 Yes 
4 15 London Paris  8 5/21/2016 13:50 No 
0

になり

#create mirror values 
df['M1'],df['M2'] = df['start'] + df['end'],df['end'] + df['start'] 

#keep values that exist back and forth 
df = df.loc[(df.M1.isin(df.M2))].iloc[:,:6] 

#drop where id is less than one 
df.drop(df.id.count() <= 1,inplace=True) 

#sort output 
df.sort_values(by=['id','Time'],ascending=[True,True],inplace=True) 

です。 Groupby id

df.groupby("id") 

b。 Time並べ替え「:。。

x.sort_values("Time") # x is a subset of df with identical `id` 
d = x.sort_values("Time")[["start", "end"]].values 

Cレコードの隣接ペアがstartendの交流を持っているかどうかをチェックし

isloop = [all(i[0] == i[1][::-1]) for i in zip(d[:-1], d[1:])] 

だから、完全なコードは次のとおりです。

def func(x): 
    d = x.sort_values("Time")[["start", "end"]].values 
    isloop = [all(i[0] == i[1][::-1]) for i in zip(d[:-1], d[1:])] 
    return x[:-1][isloop] 
df.groupby("id").apply(func) 

結果:

     Time Trip count  end id start 
id 
2 2 2016-05-18 17:55:00 No 15 Vienna 2.0 Prague 
15 1 2016-05-19 11:50:00 Yes 01 London 15.0 Paris 
関連する問題