用DatetimeIndex的属性分组

# 读取crime数据集,行索引设为REPORTED_DATE,并排序
crime_sort = pd.read_hdf('data/crime.h5', 'crime') \
.set_index('REPORTED_DATE') \
.sort_index() #用于对索引列排序

'''
解释:
存储文件
day_close.to_hdf('data/crime.h5', key='crime')
再次读取的时候, 需要指定键的名字
new_close = pd.read_hdf("data/crime.h5", key='crime')
'''
# 输出DatetimeIndex的可用属性和方法
common_attrs = set(dir(crime_sort.index)) & set(dir(pd.Timestamp))
#如果 dir() 没有参数,则返回当前作用域中的名称列表;否则,返回给定 object 的一个已排序的属性名称列表。
#如果对象提供了 __dir__() 方法,则它将会被使用;否则,使用默认的 dir() 逻辑,并返回。
#使用 dir() 可以查看指定模块中定义的名称,它返回的是一个已排序的字符串列表:

print([attr for attr in common_attrs if attr[0] != '_'])
'''
['freqstr', 'tz', 'is_month_end', 'freq', 'day', 'strftime', 'is_year_start', 'normalize', 
'weekday', 'week', 'round', 'year', 'month_name', 'ceil', 'min', 'dayofyear', 'timetz', 
'date', 'weekofyear', 'tz_convert', 'days_in_month', 'dayofweek', 'floor', 'month', 
'second', 'to_julian_date', 'is_quarter_start', 'to_period', 'microsecond', 'daysinmonth', 
'is_leap_year', 'is_month_start', 'tz_localize', 'tzinfo', 'nanosecond', 'to_pydatetime', 
'to_numpy', 'day_name', 'is_year_end', 'max', 'quarter', 'is_quarter_end', 'time', 
'resolution', 'hour', 'minute']
'''
# 用index找到星期名
crime_sort.index.day_name().value_counts()
'''
Monday       70024
Friday       69621
Wednesday    69538
Thursday     69287
Tuesday      68394
Saturday     58834
Sunday       55213
Name: REPORTED_DATE, dtype: int64

'''
# groupby可以接收函数作为参数。
# 用函数将行索引变为周几,然后按照犯罪和交通事故统计
crime_sort.groupby(lambda x: x.day_name())['IS_CRIME', 'IS_TRAFFIC'].sum()
  IS_CRIME IS_TRAFFIC
Friday 48833 20814
Monday 52158 17895
Saturday 43363 15516
Sunday 42315 12968
Thursday 49470 19845
Tuesday 49658 18755
Wednesday 50054 19508

猜你喜欢

转载自blog.csdn.net/weixin_48135624/article/details/114242236