J'ai une trame de données comme indiqué ci-dessous à partir du cadre de données ci-dessus, je voudrais préparer ci-dessous le cadre de données p> Sortie attendue: P> < Pré> xxx pré> Si une unité est créée en 2011, elle doit être comptée pour toutes les prochaines années. P> É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. P> P>
3 Réponses :
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
Vous devriez éviter d'utiliser Appliquer code>: Stackoverflow.com/a/54432584/11610186
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]
Vous devriez éviter d'utiliser Appliquer code>: Stackoverflow.com/a/54432584/11610186
Cela devrait faire l'affaire: sortie: p>
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 code> 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