J'ai un DataFrame qui contient des mois et des années:

df:
    month   year
0   Jan     2012.0
1   Feb     2012.0
2   Mar     2012.0
3   Apr     2012.0
4   May     2012.0
5   Jun     2012.0
6   Jul     2012.0
7   Aug     2012.0
8   Sep     2012.0
9   Oct     2012.0
10  Nov     2012.0
11  Dec     2012.0

Je veux ajouter une autre colonne qui détermine une année commerciale qui commence le mars chaque année Quelque chose comme ceci :.

df:
        month   year     business_year
    0   Jan     2012.0     2011
    1   Feb     2012.0     2011
    2   Mar     2012.0     2012
    3   Apr     2012.0     2012
    4   May     2012.0     2012
    5   Jun     2012.0     2012
    6   Jul     2012.0     2012
    7   Aug     2012.0     2012
    8   Sep     2012.0     2012
    9   Oct     2012.0     2012
    10  Nov     2012.0     2012
    11  Dec     2012.0     2012
    12  Jan     2013.0     2012
    13  Feb     2013.0     2012
1
debugging XD 11 mars 2019 à 20:24

2 réponses

Meilleure réponse

En supposant que votre mois est une chaîne, vous pouvez utiliser l'extrait de code suivant:

df['business_year'] = df['year'] + df['month'].apply(lambda x: -1 if x in ('Jan', 'Feb') else 0)

Ou, si vous voulez quelque chose de plus performant:

df['business_year'] = df['year'] + ~df1['month'].isin(('Jan', 'Feb')) - 1
4
Mstaino 11 mars 2019 à 19:10

IIUC, utilisez pd.to_datetime pour convertir en datetime. Vous pouvez ensuite soustraire 2 mois de chaque date et renvoyer l'année correspondante du résultat.

import calendar

mapping = {calendar.month_abbr[i]: i for i in range(13)}
df['month'] = df['month'].map(mapping)

(pd.to_datetime(df.assign(day=1)) - pd.offsets.MonthBegin(2)).dt.year

0     2011
1     2011
2     2012
3     2012
4     2012
5     2012
6     2012
7     2012
8     2012
9     2012
10    2012
11    2012
dtype: int64
2
cs95 11 mars 2019 à 17:36