2 votes

créer une nouvelle colonne pandas qui est une tabulation des lignes ci-dessus

Je l'ai fait :

pd.DataFrame({'col1':['A','A','B','F']})

    col1
0   A
1   A
2   B
3   F

Je veux :

pd.DataFrame({'col1':['A','A','B','F'],'col2':['1A:0B:0C:0D:0E:0F','2A:0B:0C:0D:0E:0F','2A:1B:0C:0D:0E:0F','2A:1B:0C:0D:0E:1F']})

    col1    col2
0   A   1A:0B:0C:0D:0E:0F
1   A   2A:0B:0C:0D:0E:0F
2   B   2A:1B:0C:0D:0E:0F
3   F   2A:1B:0C:0D:0E:1F

Exigences :

J'ai une colonne qui peut prendre une des 6 valeurs (A:F). Je souhaite créer une nouvelle colonne qui affiche le total des valeurs de cette ligne et des valeurs supérieures.

Des suggestions ?

4voto

ALollz Points 23271

Vous pouvez utiliser get_dummies + cumsum . Cette sortie est généralement plus facile à utiliser, mais si vous avez besoin d'une sortie sous forme de chaîne unique, vous pouvez joindre les colonnes avec les décomptes. Les .reindex y .fillna s'assurer que tout est ordonné et comprend exactement les catégories souhaitées.

import pandas as pd
df = pd.DataFrame({'col1':['A','A','B','F']})

df = (pd.get_dummies(df['col1'])
        .reindex(list('ABCDEF'), axis=1)
        .fillna(0, downcast='infer')
        .cumsum())
#   A  B  C  D  E  F
#0  1  0  0  0  0  0
#1  2  0  0  0  0  0
#2  2  1  0  0  0  0
#3  2  1  0  0  0  1

df['res'] = [':'.join(x) for x in (df.astype(str)+df.columns).to_numpy()]
#   A  B  C  D  E  F                res
#0  1  0  0  0  0  0  1A:0B:0C:0D:0E:0F
#1  2  0  0  0  0  0  2A:0B:0C:0D:0E:0F
#2  2  1  0  0  0  0  2A:1B:0C:0D:0E:0F
#3  2  1  0  0  0  1  2A:1B:0C:0D:0E:1F

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X