2016-01-30 3 views
2

У меня возникли проблемы с созданием сводной таблицы из dataframe с индексом datetimeindex в качестве индекса. Редактирование, чтобы показать полный кодСводная таблица, не созданная с помощью datetimeindex из dataframe

Код в вопросе

unit1 = ["U1", "U1", "U1", "U1", "U1", "U1"] 
name1 = ["fn ln", "fn ln2", "fn ln3", "fn ln4", "fn ln5", "fn ln6"] 
count1 = [2,4,6,8,10,12] 

df = pd.DataFrame({'Date': pd.Timestamp('2016-01-01'), 
        'Unit': unit1, 
        'Name"': name1, 
        'Count': count1}) 
df2 = df.set_index(pd.DatetimeIndex(df.Date)) 
df2['Month'] = df2.index.month 

# this line succeeds 
pt = pd.pivot_table(df, index=df2.index.month, values='Count') 

# this line fails with Series object has no attribute month 
pt = pd.pivot_table(df, index=df2.Month.month, values='Count') 

Внутренности для dataframe (_stat_axis), показывают, что поле индекса DatetimeIndex. Столбец месяца также имеет параметр datetimeindex, но создание сводной таблицы по-прежнему дает ошибку серии.

+0

Я думаю, что это ошибка - работает только создать временную колонку 'ДФ [ 'т'] = df.index.month' и' печать pd.pivot_table (df, index = 'm', aggfunc = np.sum) ' – jezrael

+0

Странно, это не работает. Даже добавление ключевого слова values ​​не делает трюк. Похоже, что единственным решением является фактический индекс. – cryptoref

+0

Если вы вызываете столбец 'Month', вы можете использовать:' pt = pd.pivot_table (df2, index = 'Month', values ​​= 'Count') ' – jezrael

ответ

1

Может быть, вы можете добавить параметр values к pivot_table:

print df 
      Unit Name Count 
2013-01-01 U1 fn ln  2 
2013-01-01 U1 fn ln 200 
2013-01-01 U2 fn ln  55 

print pd.pivot_table(df, index=df.index.month, values="Count", aggfunc=np.sum) 
1 257 
Name: Count, dtype: int64 
+0

Это работает. Я пытался как можно проще найти ошибку, похоже, что я сделал ее слишком простой. (См. Измененный код выше). – cryptoref