组级Python的累积计数
我有一个像这样的熊猫数据框:
df = pd.DataFrame([
['A', 1234, 20120201],
['A', 1134, 20120201],
['A', 1011, 20120201],
['A', 1123, 20121004],
['A', 1111, 20121004],
['A', 1224, 20121105],
['B', 1156, 20120403],
['B', 2345, 20120504],
['B', 4567, 20120504],
['B', 8796, 20120606]
], columns = ['company', 'invoice', 'date'])
目的是创建一个名为“TotalPaidInvoices”的新列,它计算每条记录之前支付的发票数量。
我尝试了以下
df['date'] = pd.to_datetime(df['date'])
df = df.sort_values(['company', 'date'], ascending=[True, True]).reset_index(drop=True)
df['totalpaidinvoices']= df[(df['date'] != df['date'].shift(1))].groupby(['company']).cumcount()
df['totalpaidinvoices']= df.groupby('company')['totalpaidinvoices'].fillna(method='ffill')
但是,我得到的不是发票数量,而是当前记录之前的公司 - 日期组合数量。
输出 :
df = pd.DataFrame(
[
['A', 1234, 20120201, 0.0],
['A', 1134, 20120201, 0.0],
['A', 1011, 20120201, 0.0],
['A', 1123, 20121004, 1.0],
['A', 1111, 20121004, 1.0],
['A', 1224, 20121105, 2.0],
['B', 1156, 20120403, 0.0],
['B', 2345, 20120504, 1.0],
['B', 4567, 20120504, 1.0],
['B', 8796, 20120606, 2.0]
], columns = ['company', 'invoice', 'date', 'totalpaidinvoices'])
预期输出:
df = pd.DataFrame(
[
['A', 1234, 20120201, 0.0],
['A', 1134, 20120201, 0.0],
['A', 1011, 20120201, 0.0],
['A', 1123, 20121004, 3.0],
['A', 1111, 20121004, 3.0],
['A', 1224, 20121105, 5.0],
['B', 1156, 20120403, 0.0],
['B', 2345, 20120504, 1.0],
['B', 4567, 20120504, 1.0],
['B', 8796, 20120606, 3.0]
], columns = ['company', 'invoice', 'date', 'totalpaidinvoices'])
有什么建议可以解决吗?