我有一个像df
的数据框:
date way
date_1 A
date_1 B
date_1 A
date_2 A
date_2 A
date_2 A
我想根据以下条件添加一个journey
列:这是一个累积的总和,当way
或date
从一行到下一个不相同并递增并重置时, date
发生变化时的总和
我已经有:
(df['journey']=df['date'].ne(df['date'].shift())) |(df['way'].ne(df['way'].shift()))).cumsum()
,它们在date
或way
发生变化时获得累计和。 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
答案 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