Mam dataframe wygląda jak df:

date   way 
date_1 A
date_1 B
date_1 A 
date_2 A 
date_2 A 
date_2 A

Chcę dodać kolumnę {{x0} kiedy zmieni się date

Mam już :

(df['journey']=df['date'].ne(df['date'].shift())) |(df['way'].ne(df['way'].shift()))).cumsum()

Które otrzymują sumę skumulowaną, gdy zmieniają się date lub way. Jak mogę dodać reset, gdy zmieni się date?

Oczekiwany wynik jest:

date   way journey
date_1 A    1
date_1 B    2
date_1 A    3
date_2 A    1
date_2 A    1
date_2 A    1
1
Pi-R 14 październik 2020, 12:37

1 odpowiedź

Najlepsza odpowiedź

Posługiwać się:

df['journey']= df['way'].ne(df['way'].shift().bfill()).groupby(df['date']).cumsum().add(1)
print (df)
     date way  journey
0  date_1   A        1
1  date_1   B        2
2  date_1   A        3
3  date_2   A        1
4  date_2   A        1
5  date_2   A        1

Lub:

df['journey'] = (df[['date', 'way']].ne(df[['date', 'way']].shift())
                   .any(axis=1).groupby(df['date']).cumsum())

print (df)
     date way  journey
0  date_1   A        1
1  date_1   B        2
2  date_1   A        3
3  date_2   A        1
4  date_2   A        1
5  date_2   A        1

Twoje rozwiązanie:

df['journey'] = ((df['date'].ne(df['date'].shift()) |(df['way'].ne(df['way'].shift())))
                   .groupby(df['date']).cumsum())

print (df)
     date way  journey
0  date_1   A        1
1  date_1   B        2
2  date_1   A        3
3  date_2   A        1
4  date_2   A        1
5  date_2   A        1
1
jezrael 14 październik 2020, 09:46