[英]Cumulative count at group level with boolean indexing in Pandas
我正在开发这个问题的答案,它只使用 boolean 索引而不是cumcount
。 预期的 output 是一个total_paid_invoices
列,对于每家公司,它计算每条记录之前(在日期时间方面)支付的到达声音的数量。
company invoice date
0 A 1234 20120201
1 A 1134 20120201
2 A 1011 20120201
3 A 1123 20121004
4 A 1111 20121004
5 A 1224 20121105
6 B 1156 20120403
7 B 2345 20120504
8 B 4567 20120504
9 B 8796 20120606
我在 for 循环中而不是在 groupby 中处理公司组:
for company in df.company.unique():
df['total_paid_invoices'] = df.date.apply(
lambda x: df.loc[(df.date<x)&(df.company==company)].shape[0]
)
但是,output 在第五行不正确(值应该是5
):
company invoice date total_paid_invoices
0 A 1234 2012-02-01 0
1 A 1134 2012-02-01 0
2 A 1011 2012-02-01 0
3 A 1123 2012-10-04 4
4 A 1111 2012-10-04 4
5 A 1224 2012-11-05 4
这就是我问这个问题的原因:当我在第五行的日期做手术时
df.loc[(df.date<df.date.iloc[5])&(df.company=='A')].shape[0]
output 是5
。 为什么这没有进入 output dataframe 而我们在示例数据中看到的值的 rest 得到正确处理?
感谢@rafaelc 指出覆盖问题。 您需要为=
两侧的company
编制索引,以便一次将 lambda function 应用于 dataframe 的子集:
for company in df.company.unique():
df.loc[df.company==company, 'total_paid_invoices'] = df.date.apply(
lambda x: df.loc[(df.date<x)&(df.company==company)].shape[0]
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.