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