J'ai le pandas dataframe suivant:
dfalph.head()
token year uses books
386 xanthos 1830 3 3
387 xanthos 1840 1 1
388 xanthos 1840 2 2
389 xanthos 1868 2 2
390 xanthos 1875 1 1
J'agrège les lignes avec token
et years
en double comme ceci:
dfalph = dfalph[['token','year','uses','books']].groupby(['token', 'year']).agg([np.sum])
dfalph.columns = dfalph.columns.droplevel(1)
dfalph.head()
uses books
token year
xanthos 1830 3 3
1840 3 3
1867 2 2
1868 2 2
1875 1 1
Au lieu d'avoir les champs 'token' et 'year' dans l'index, je voudrais les retourner aux colonnes et avoir un index entier.
Méthode n ° 1: reset_index()
>>> g
uses books
sum sum
token year
xanthos 1830 3 3
1840 3 3
1868 2 2
1875 1 1
[4 rows x 2 columns]
>>> g = g.reset_index()
>>> g
token year uses books
sum sum
0 xanthos 1830 3 3
1 xanthos 1840 3 3
2 xanthos 1868 2 2
3 xanthos 1875 1 1
[4 rows x 4 columns]
Méthode n ° 2: ne faites pas l'index en premier lieu, en utilisant as_index=False
>>> g = dfalph[['token', 'year', 'uses', 'books']].groupby(['token', 'year'], as_index=False).sum()
>>> g
token year uses books
0 xanthos 1830 3 3
1 xanthos 1840 3 3
2 xanthos 1868 2 2
3 xanthos 1875 1 1
[4 rows x 4 columns]
Je diffère de la réponse acceptée. Bien qu'il existe 2 façons de procéder, celles-ci n'entraîneront pas nécessairement la même sortie. Surtout lorsque vous utilisez Grouper
dans groupby
index=False
reset_index()
exemple df
+---------+---------+-------------+------------+
| column1 | column2 | column_date | column_sum |
+---------+---------+-------------+------------+
| A | M | 26-10-2018 | 2 |
| B | M | 28-10-2018 | 3 |
| A | M | 30-10-2018 | 6 |
| B | M | 01-11-2018 | 3 |
| C | N | 03-11-2018 | 4 |
+---------+---------+-------------+------------+
Ils ne fonctionnent pas de la même manière.
df = df.groupby(
by=[
'column1',
'column2',
pd.Grouper(key='column_date', freq='M')
],
as_index=False
).sum()
Ce qui précède donnera
+---------+---------+------------+
| column1 | column2 | column_sum |
+---------+---------+------------+
| A | M | 8 |
| B | M | 3 |
| B | M | 3 |
| C | N | 4 |
+---------+---------+------------+
Tandis que,
df = df.groupby(
by=[
'column1',
'column2',
pd.Grouper(key='column_date', freq='M')
]
).sum().reset_index()
Va donner
+---------+---------+-------------+------------+
| column1 | column2 | column_date | column_sum |
+---------+---------+-------------+------------+
| A | M | 31-10-2018 | 8 |
| B | M | 31-10-2018 | 3 |
| B | M | 30-11-2018 | 3 |
| C | N | 30-11-2018 | 4 |
+---------+---------+-------------+------------+
Vous devez ajouter drop=True
:
df.reset_index(drop=True)
df = df.groupby(
by=[
'column1',
'column2',
pd.Grouper(key='column_date', freq='M')
]
).sum().reset_index(drop=True)