Python 按外观分配编号,然后按iD分配总和

Python 按外观分配编号,然后按iD分配总和,python,pandas,Python,Pandas,以下是我的数据示例: df = pd.DataFrame.from_dict({'id': ['A', 'B', 'A', 'C', 'D', 'B', 'C'], 'val': [1,2,-3,1,5,6,-2], 'date':['01-01-2020','01-02-2020','01-03-2020','01-04-2020','01-02-2020','01-03-2020','01-06-2020']}) print(df) id val date 0 A

以下是我的数据示例:

df = pd.DataFrame.from_dict({'id': ['A', 'B', 'A', 'C', 'D', 'B', 'C'], 'val': [1,2,-3,1,5,6,-2], 'date':['01-01-2020','01-02-2020','01-03-2020','01-04-2020','01-02-2020','01-03-2020','01-06-2020']})

print(df)
  id  val        date
0  A    1  01-01-2020
1  B    2  01-02-2020
2  A   -3  01-03-2020
3  C    1  01-04-2020
4  D    5  01-02-2020
5  B    6  01-03-2020
6  C   -2  01-06-2020
我是pandas and python的新手,我需要的是按id计算外观行,按日期排序,然后对id的外观进行累加,如下所示:

print(df)
  id  val        date cumsum 
0  A    1  01-01-2020   1
1  A   -3  01-02-2020   2
2  B    2  01-02-2020   1
3  B    6  01-03-2020   2 
4  C    1  01-04-2020   1
5  C   -2  01-06-2020   2
6  D    5  01-02-2020   1
我尝试使用df['cumsum']=df.groupby['id','date']['id'].cumsum,但显然我不能对id求和,如果我使用val,我会得到值的和。。我能做什么?thnks

让我们试试groupby,cumsum

让我们试试groupby,cumsum


记住,cumcount从零开始,所以@wwnde添加了一个感谢您的回答@wwnde。我还有一个问题,如果我有更多的列,我如何避免在它们上使用cumcount或cumsum?我必须在groupby的[]上添加列?例如['val','date','col4',…]?或者它不是必需的?@M.Weithofer将您不想使用的列从列表/[]中排除,您应该会没事的。如果这个答案对你有效,你介意接受它吗?记住cumcount从零开始,所以@wwnde添加了一个感谢你的答案@wwnde。我还有一个问题,如果我有更多的列,我如何避免在它们上使用cumcount或cumsum?我必须在groupby的[]上添加列?例如['val','date','col4',…]?或者它不是必需的?@M.Weithofer将您不想使用的列从列表/[]中排除,您应该会没事的。如果这个答案对你有用,你介意接受它吗?
df=df.assign(cumsum=df.groupby('id')['val','date'].cumcount()+1).sort_values(by=['id'])