2015-10-23 2 views
0

Я часто нахожу, что я делаю что-то вроде ниже, начиная с фрейма данных, в котором есть столбец дат в строковом формате, который я хочу использовать в некоторых единицах календаря (дни, месяцы, годы и т. Д.). Я прибегаю к чему-то вроде ниже потому что я знаю, что resample работает только с серией DateTimeIndex.Самый эффективный способ бинарной серии строк панды по дням/месяцам/годам?

Есть ли более эффективный способ хранения данных по датам, который является более сжатым с точки зрения кода и/или быстрее обрабатывать?

build = pd.to_datetime(df.date_build,'%m/%d/%y') 
    build = pd.DatetimeIndex(build) 
    final = build.to_series() 
    one = final.resample('M',how='count') 

ответ

1

Вы можете GroupBy столбец времени непосредственно:

df.groupby(pd.Grouper(key='date_build', freq='M')).size() 

только немного быстрее в плане выполнения - все эти операции преобразования довольно быстро.

In [198]: df = pd.DataFrame({'date_build': pd.date_range('1900-1-1', periods=100000)}) 

In [199]: %timeit pd.DatetimeIndex(df.date_build).to_series().resample('M', how='count') 
10 loops, best of 3: 149 ms per loop 

In [200]: %timeit df.groupby(pd.Grouper(key='date_build', freq='M')).size() 
10 loops, best of 3: 136 ms per loop