繁体   English   中英

在 Pandas 中索引 boolean 的组级别的累积计数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM