为工作日和周末创建一个包含按小时和用户类型划分的乘车次数的数据框

2024-04-20 05:21:52 发布

您现在位置:Python中文网/ 问答频道 /正文

为工作日和周末创建一个包含按小时和用户类型划分的乘车次数的数据框。使用starttime确定每次骑乘的时间。这是starttime的CSV文件 https://drive.google.com/file/d/0B4KXs5bh3CmPWXJkQWhkbzI0WEE/view?usp=sharing 数据必须采用此格式 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

这是我用来计算一周(周一到周日)小时数的代码。 我搜索了各种各样的帖子,发现

df.index.dayofweek >= 5

但没有得到结果。 小型CSV[文件链接][2]


Tags: 文件csv数据dftypecustomersubscriberpd
1条回答
网友
1楼 · 发布于 2024-04-20 05:21:52

您可以使用:

  • 为convert columns to datetime添加参数parse_dates

  • 通过^{}type创建新系列

  • 通过^{}创建新系列

  • ^{}typeshoursusertype聚合^{}并按^{}重塑


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

相关问题 更多 >