После groupby
вы получаете MultiIndex DataFrame
, поэтому значения перерисовываются на первом и втором уровне, только не отображаются.
Если второй DataFrame не нужен, вы можете преобразовать DatetimeIndex
в YYYY-MM
формат strftime
или в месячный период to_period
:
df_grouped = df.groupby(['Country','Description', df.index.strftime('%Y-%m')]).sum()
Или:
df_grouped = df.groupby(['Country','Description', df.index.to_period('m')]).sum()
При необходимости второй DataFrame
добавить reset_index
для преобразования уровней в столбцы и для преобразования второго уровня MultiIndex.set_levels
с get_level_values
:
df_grouped = df.groupby(['Country','Description', pd.Grouper(freq = 'M')]).sum()
df = df_grouped.reset_index()
idx = df_grouped.index.get_level_values(2).strftime('%Y-%m')
df_grouped.index = df_grouped.index.set_levels(idx, level=2)
Sample
rng = pd.date_range('2017-04-03', periods=10, freq='10D')
df = pd.DataFrame({'Country': ['Country'] * 10,
'Description':['A'] * 3 + ['B'] * 3 + ['C'] * 4,
'a': range(10)}, index=rng)
print (df)
Country Description a
2017-04-03 Country A 0
2017-04-13 Country A 1
2017-04-23 Country A 2
2017-05-03 Country B 3
2017-05-13 Country B 4
2017-05-23 Country B 5
2017-06-02 Country C 6
2017-06-12 Country C 7
2017-06-22 Country C 8
2017-07-02 Country C 9
df_grouped = df.groupby(['Country','Description', pd.Grouper(freq = 'M')]).sum()
print (df_grouped)
a
Country Description
Country A 2017-04-30 3
B 2017-05-31 12
C 2017-06-30 21
2017-07-31 9
df = df_grouped.reset_index().rename(columns={'level_2':'Date'})
print (df)
Country Description Date a
0 Country A 2017-04-30 3
1 Country B 2017-05-31 12
2 Country C 2017-06-30 21
3 Country C 2017-07-31 9
idx = df_grouped.index.get_level_values(2).strftime('%Y-%m')
df_grouped.index = df_grouped.index.set_levels(idx, level=2)
print (df_grouped)
a
Country Description
Country A 2017-04 3
B 2017-05 12
C 2017-06 21
2017-07 9