Python 3.x 每当另一列更改时求和
我有一个带有供应商、发票和金额的Python 3.x 每当另一列更改时求和,python-3.x,pandas,Python 3.x,Pandas,我有一个带有供应商、发票和金额的df。我想创建一个名为ITEM的列,它从1开始,当发票号更改时,它将更改为2,依此类推 我试过使用cumsum,但它实际上不起作用——不起作用也是有道理的。按照我编写代码的方式,对于同一张发票,它将求和1,并在发票更改时重新开始 data = pd.read_csv('data.csv') data['ITEM_drop'] = 1 s = data['INVOICE'].ne(data['INVOICE'].shift()).cumsum() data['IT
df
。我想创建一个名为ITEM的列,它从1开始,当发票号更改时,它将更改为2,依此类推
我试过使用cumsum,但它实际上不起作用——不起作用也是有道理的。按照我编写代码的方式,对于同一张发票,它将求和1,并在发票更改时重新开始
data = pd.read_csv('data.csv')
data['ITEM_drop'] = 1
s = data['INVOICE'].ne(data['INVOICE'].shift()).cumsum()
data['ITEM'] = data.groupby(s)['ITEM_drop'].cumsum()
输出:
VENDOR INVOICE AMOUNT ITEM_drop ITEM
A 123 10 1 1
A 123 12 1 2
A 456 44 1 1
A 456 5 1 2
A 456 10 1 3
B 999 7 1 1
B 999 1 1 2
我想要的是:
VENDOR INVOICE AMOUNT ITEM_drop ITEM
A 123 10 1 1
A 123 12 1 1
A 456 44 1 2
A 456 5 1 2
A 456 10 1 2
B 999 7 1 3
B 999 1 1 3
你已经有了。这是
s
:data['ITEM']=s
谢谢。我以前没注意到!到目前为止,您的发票列似乎已排序。因此,您可以执行:df.assign(ITEM=df.INVOICE.astype('category').cat.codes+1)