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'])