Neue Zahlenvariable mit Pandas erstellen?

Oct 17 2020

Ich habe df unten gegeben.

df

VAR FLAG
A      1
A      1
A      1
B      1
B      1
B      0
B      0
B      1
B      1
B      1
B      0
C      0
C      0

Ich möchte eine neue Variable mit dem Namen FLAG1 mit VAR und FLAG erstellen. Die endgültige Ausgabe unten angegeben.

Endgültige Ausgabe: -

VAR FLAG    FLAG1
A      1        1
A      1        1
A      1        1
B      1        1
B      1        1
B      0        2
B      0        3
B      1        4
B      1        4
B      1        4
B      0        5
C      0        1
C      0        2

Antworten

3 ScottBoston Oct 17 2020 at 21:44

Sie können diese Logik verwenden:

df['FLAG1'] =  (df.groupby('VAR')['FLAG'] 
                  .transform(lambda x: ((x != x.shift()) | (x == 0)).cumsum()))

Ausgabe:

   VAR  FLAG  FLAG1
0    A     1      1
1    A     1      1
2    A     1      1
3    B     1      1
4    B     1      1
5    B     0      2
6    B     0      3
7    B     1      4
8    B     1      4
9    B     1      4
10   B     0      5
11   C     0      1
12   C     0      2
1 BENY Oct 17 2020 at 21:47

Versuche etwas Neues factorize

pd.Series(zip(df['FLAG'].eq(0).cumsum(),df.FLAG)).groupby(df['VAR']).transform(lambda x : x.factorize()[0]+1)
Out[72]: 
0     1
1     1
2     1
3     1
4     1
5     2
6     3
7     4
8     4
9     4
10    5
11    1
12    2
dtype: int32