首页 > 解决方案 > pandas cumsum 工作不正确

问题描述

我有数据框:

data = {'process': ['buying','selling','searhicng','repairing', 'preparing', 'selling','buying', 'searching', 'selling','searching'],
        'type': ['in_progress','in_progress','end','in_progress', 'end', 'in_progress','in_progress', 'end', 'in_progress','end'],
'country': ['usa','usa', 'usa','ghana', 'ghana','ghana','ghana', 'ghana', 'albania','albania'],
'id': ['022','022','022', '011','011', '011','011', '011', '6','6'],
'created': ['2021-07-01','2021-07-02','2021-07-03','2021-07-04','2021-07-05','2021-07-06','2021-07-07','2021-07-08','2021-07-09','2021-07-10']        
}
df = pd.DataFrame(data, columns = ['process','type','country', 'id','created'])

在此处输入图像描述

我需要在应用函数中使用 cumsum 。使用后df.groupby('country').apply(lambda x:(x['type']!=x['type'].shift()).cumsum()).reset_index() 我得到这样的数据框

在此处输入图像描述

但是我需要获取另一个数据框,任何人都可以看到问题吗?Pandas 版本 '0.25.3' 输出结果:

在此处输入图像描述

标签: pythonpandasdataframe

解决方案


IIUC 用途:

df['new'] = df.groupby('country')['type'].apply(lambda x:(x!=x.shift()).cumsum())

print (df)
     process         type  country   id     created  new
0     buying  in_progress      usa  022  2021-07-01    1
1    selling  in_progress      usa  022  2021-07-02    1
2  searhicng          end      usa  022  2021-07-03    2
3  repairing  in_progress    ghana  011  2021-07-04    1
4  preparing          end    ghana  011  2021-07-05    2
5    selling  in_progress    ghana  011  2021-07-06    3
6     buying  in_progress    ghana  011  2021-07-07    3
7  searching          end    ghana  011  2021-07-08    4
8    selling  in_progress  albania    6  2021-07-09    1
9  searching          end  albania    6  2021-07-10    2

推荐阅读