如何根据日期重置累计金额

时间:2020-10-14 09:37:00

标签: python pandas dataframe pandas-groupby

我有一个像df的数据框:

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

我想根据以下条件添加一个journey列:这是一个累积的总和,当waydate从一行到下一个不相同并递增并重置时, date发生变化时的总和

我已经有:

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

,它们在dateway发生变化时获得累计和。 date更改时如何添加重置?

预期结果是:

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 个答案:

答案 0 :(得分:1)

使用:

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

或者:

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

您的解决方案:

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