Je veux couper les données continues en un certain groupe. J'ai des données comme celle-ci:
Index Age Predict group 1: 5 17 0 0 23 0 group 2: 6 29 1 group 3: 1 39 0 group 4: 3 41 1 group 5: 2 70 0 4 50 0
J'essaye:
Index Age Predict 5 17 0 0 23 0 6 29 1 1 39 0 3 41 1 2 70 0 4 50 0
Après le tri:
df_1 = df[['Age','Predict']] data = df_1.sort_values(by='Age')
3 Réponses :
IIUC, les groupes souhaités sont créés à partir de Predict, où diff entre les lignes suivantes n'est pas égal à 0. vous pouvez donc créer une colonne:
data_ = df.sort_values('Age')
d = {i: dfg
for i,(_, dfg) in enumerate(data_.groupby(data_['Predict'].diff().ne(0).cumsum()),1)}
print (d[1])
Index Age Predict
5 5 17 0
0 0 23 0
Ou si vous souhaitez diviser vos données et ne pas créer la colonne de groupe, une façon est de créer un dictionnaire contenant chaque groupe
data_ = df.sort_values('Age')
data_['gr'] = data_['Predict'].diff().ne(0).cumsum()
print (data_)
Index Age Predict gr
5 5 17 0 1
0 0 23 0 1
6 6 29 1 2
1 1 39 0 3
3 3 41 1 4
4 4 50 0 5
2 2 70 0 5
df.groupby((df['Predict'] != df['Predict'].shift(1)).cumsum()) Basically check if the current value is not the same previous value, if not increment. This will allow you to group by the change in values of Predict
Utilisation de .grouby et .cumsum()
group 1 Age Predict 5 17 0 0 23 0 group 2 Age Predict 6 29 1 group 3 Age Predict 1 39 0 group 4 Age Predict 3 41 1 group 5 Age Predict 4 50 0 2 70 0
Résultat:
for i, grp in data.groupby([(data['Predict'] != data['Predict'].shift()).cumsum()]):
print('group', i)
print(grp)
vous avez besoin de
pd.cutpuis utilisez une compréhension de dict, si vous spécifiez vos tranches d'âge, ce serait utile