2017-09-07 6 views
2

営業日と週末の乗車回数とユーザータイプを使用してpandas DataFrameを作成します。 starttimeを使用して各乗車時間を決定します。ここでSTARTTIMEは、データがこの形式で pic営業時間と週末のユーザータイプによる乗り換え回数のパンダデータフレームを作成

df = pd.DataFrame({'Customer':rides['starttime']}) 
rides['Customer'] = pd.to_datetime(df['Customer']) 
df['User Type Hour'] = rides['Customer'].dt.hour 
df2=df[rides['usertype']=="Customer"].groupby('User Type Hour').count() 
df2 
df5 = pd.DataFrame({'Subscriber':rides['starttime']}) 
rides['Subscriber'] = pd.to_datetime(df5['Subscriber']) 
df5['User Type Hour'] = rides['Subscriber'].dt.hour 
dfe=df5[rides['usertype']=="Subscriber"].groupby('User Type Hour').count() 
dfe 
#c= df2.style.set_table_styles([dict(selector="th",props=[('max-width', '100px')])]) 
frames=[df2,dfe] 
#concatinate the dataframes 
result=pd.concat(frames, axis=1, join='inner') 
result 

でなければなりません https://drive.google.com/file/d/0B4KXs5bh3CmPWXJkQWhkbzI0WEE/view?usp=sharing 来るところからCSVファイルには、ここで私は一週間(月・日)のための時間を計算していることにより、コードがありますさ。 私は様々な記事を検索し、

df.index.dayofweek >= 5 

が見つかりましたが、結果を取得できませんでした。あなたが使用できるCSVの 小さなサイズ[ファイルリンク] [2]

+2

うーん...私は、ファイルをダウンロードするように見えることはできません。ここで約20行のデータを提供できますか? –

+0

ohk確かに私はいくつかの列を貼り付けてコピーするつもりです –

+0

リンクを編集しました –

答えて

0

  • 日時

  • に変換列のパラメータparse_datesを追加type

  • ため numpy.whereによる新シリーズを作成
  • 新しいシリーズを作成するhour

  • typesによってgroupbyhoursusertypeすることにより、集約sizeunstack


df = pd.read_csv('201507-citibike-tripdata.csv', parse_dates=[1,2]) 

types = np.where(df['starttime'].dt.dayofweek >= 5, 'Weekends', 'Workdays') 
hours = df['starttime'].dt.hour 
result = df.groupby([types, hours, 'usertype']).size().unstack() 

print (result) 


usertype   Customer Subscriber 
     starttime      
Weekends 0    1079  3184 
     1    609  2192 
     2    429  1410 
     ... 
     21    2411  6207 
     22    2192  5083 
     23    1463  3555 
Workdays 0    1385  6075 
     1    768  2850 
     2    442  1472 
     ... 
     23    2611  12607 

によっていくつかのデータクリーニング再構築:

df = df.reset_index() \ 
     .rename_axis(None, 1) \ 
     .rename(columns={'level_0':'type', 'starttime':'User Type Hour'}) 
print (df) 

     type User Type Hour Customer Subscriber 
0 Weekends    0  1079  3184 
1 Weekends    1  609  2192 
... 
23 Weekends    23  1463  3555 
24 Workdays    0  1385  6075 
25 Workdays    1  768  2850 
... 
46 Workdays    22  3311  19137 
47 Workdays    23  2611  12607 

type列の値を省略する必要がある場合:

df = df.reset_index() \ 
     .rename_axis(None, 1) \ 
     .rename(columns={'level_0':'type', 'starttime':'User Type Hour'}) 

df['type'] = df['type'].mask(df['type'].duplicated(), '') 
print (df) 

     type User Type Hour Customer Subscriber 
0 Weekends    0  1079  3184 
1       1  609  2192 
2       2  429  1410 
... 
22      22  2192  5083 
23      23  1463  3555 
24 Workdays    0  1385  6075 
25       1  768  2850 
26       2  442  1472 
... 
46      22  3311  19137 
47      23  2611  12607 
+0

exectの結果が得られません。画像に与えられたそのフォーマットのデータが必要です –

+0

申し訳ありませんが、私はこのために2番目のソリューションを追加します。 'Customer'と' Subscriber'だけの列が必要ですか? – jezrael

+0

はい私は上記のフォーマットのように正確に必要です –

関連する問題