熊猫按年份分组,日期产生虚假值

时间:2019-03-09 09:16:54

标签: python pandas

我有一个从2015年1月1日到2019年3月3日的每日数据的熊猫数据框。将其读取到df并逐月/逐年应用会产生杂散值,直到2019年12月。这是获取MultiIndex级别的代码:

col_types = {'count': np.int64, 'value': np.float64}
df = pd.read_csv("myfile.csv", sep = '\t', index_col = 1, dtype = col_types, parse_dates=True)

df.dtypes # count int64, value float64
type(df.index) #pandas.core.indexes.datetimes.DatetimeIndex

group_by_list = [df.index.year, df.index.month]
grouped_df = df.groupby(group_by_list).sum()

index_rename_names_list = ['year', 'month']
index_rename_position_list = [0, 1]
grouped_df.index.rename(index_rename_names_list, index_rename_position_list, inplace = True)

grouped_df.index
MultiIndex(levels=[[2015, 2016, 2017, 2018, 2019], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]],
           codes=[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1,
           1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3,
           3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4], 
           [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0, 1, 2, 3, 4, 5, 6, 7, 
           8, 9, 10, 11, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0, 1, 2, 3, 
           4, 5, 6, 7, 8, 9, 10, 11, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 
           11]],
           names=['year', 'month'])

即使对于超出数据范围的日期,似乎也正在创建MultiIndex级别。除了在groupby()调用本身期间避免过滤之外,还有其他方法可以避免这种情况吗?谢谢

1 个答案:

答案 0 :(得分:1)

问题似乎出在原始DataFrame df的索引上,例如如果我们将df = pd.DataFrame({'a': 1}, index=pd.date_range('2015-01-01', '2019-03-03'))设置为有效,则不会出现任何问题:

df = pd.DataFrame({'a': 1}, index=pd.date_range('2015-01-01', '2019-03-03'))

group_by_list = [df.index.year, df.index.month]
grouped_df = df.groupby(group_by_list).sum()

index_rename_names_list = ['year', 'month']
index_rename_position_list = [0, 1]
grouped_df.index.rename(index_rename_names_list, index_rename_position_list, inplace = True)

grouped_df.index.max()

输出:

(2019, 3)

P.S。顺便说一句,是否有不使用resample而不是groupby的原因?