0
votes

Compte cumulatif basé sur la colonne de l'année en pandas

J'ai une trame de données comme indiqué ci-dessous xxx

à partir du cadre de données ci-dessus, je voudrais préparer ci-dessous le cadre de données

Sortie attendue: < Pré> xxx

Si une unité est créée en 2011, elle doit être comptée pour toutes les prochaines années.

Étapes: En 2011, deux unité ont créé '1' et '2'. En 2012, deux unité ont créé '3' et '5'. Ainsi, en 2012 aura une totalité de 4 unités, y compris les unités en 2011.


4 commentaires

S'il vous plaît pourriez-vous ajouter une brève description pour la sortie attendue? Merci


@ anky_91 a ajouté les commentaires


Donc, la sortie attendue a une année 2019 mais l'entrée n'a pas ce qui est attendu?


@ anky_91 J'avais tort, la dernière ligne est pour 2019 en entrée. édité. Pardon


3 Réponses :


2
votes
df = pd.DataFrame({
    'unit_id' : [1, 2, 3, 4, 5, 6, 7, 8, 9],
    'activity_gur' : [2011,2011,2012,2014,2012,2015,2017,2017,2017]})

def fill_number_of_unit_since_year(year):
    return df[df['activity_gur'] == year]['unit_id'].nunique()

def fill_list_of_units(year):
    return df[df['activity_gur'] <= year]['unit_id'].unique()

final_df = pd.DataFrame({'year' : df['activity_gur'].unique()})
final_df['number_of_unit_since_year'] = final_df['year'].apply(fill_number_of_unit_since_year)
final_df['number_of_unit_since_year'] = final_df['number_of_unit_since_year'].cumsum()
final_df['list_of_units'] = final_df['year'].apply(fill_list_of_units)
final_df

1 commentaires

Vous devriez éviter d'utiliser Appliquer : Stackoverflow.com/a/54432584/11610186



2
votes

Vous pouvez essayer ceci:

df_new = df.groupby(['Unit_Create_Year']).agg({'Unit_ID':['count','unique']}).reset_index()
df_new.columns = ['Year','Number_of_Unit_Since_Year','List_of_Units']
df_new['Number_of_Unit_Since_Year'] = df_new['Number_of_Unit_Since_Year'].cumsum()
df_new['List_of_Units'] = df_new['List_of_Units'].apply(lambda x : x.tolist()).cumsum()

df_new


   Year  Number_of_Unit_Since_Year                List_of_Units
0  2011                          2                       [1, 2]
1  2012                          4                 [1, 2, 3, 5]
2  2014                          5              [1, 2, 3, 5, 4]
3  2015                          6           [1, 2, 3, 5, 4, 6]
4  2017                          9  [1, 2, 3, 5, 4, 6, 7, 8, 9]


1 commentaires

Vous devriez éviter d'utiliser Appliquer : Stackoverflow.com/a/54432584/11610186



1
votes

Cela devrait faire l'affaire: xxx

sortie: xxx


0 commentaires