首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >根据其他列获取累积总和Pandas条件

根据其他列获取累积总和Pandas条件
EN

Stack Overflow用户
提问于 2019-04-14 01:44:24
回答 3查看 1.3K关注 0票数 1

我想创建一个列,显示部门99中发生的以前购买(每个客户)的累计计数(累计和)

我的数据框看起来像这样;其中每一行都是一个单独的事务。

代码语言:javascript
运行
复制
    id  chain   dept    category    company     brand   date    productsize     productmeasure  purchasequantity    purchaseamount  sale
0   86246   205     7   707     1078778070  12564   2012-03-02  12.00   OZ  1   7.59    268.90
1   86246   205     63  6319    107654575   17876   2012-03-02  64.00   OZ  1   1.59    268.90
2   86246   205     97  9753    1022027929  0   2012-03-02  1.00    CT  1   5.99    268.90
3   86246   205     25  2509    107996777   31373   2012-03-02  16.00   OZ  1   1.99    268.90
4   86246   205     55  5555    107684070   32094   2012-03-02  16.00   OZ  2   10.38   268.90
5   86246   205     97  9753    1021015020  0   2012-03-02  1.00    CT  1   7.80    268.90
6   86246   205     99  9909    104538848   15343   2012-03-02  16.00   OZ  1   2.49    268.90
7   86246   205     59  5907    102900020   2012    2012-03-02  16.00   OZ  1   1.39    268.90
8   86246   205     9   921     101128414   9209    2012-03-02  4.00    OZ  2   1.50    268.90

我这样做了:

代码语言:javascript
运行
复制
shopdata6['transactions_99'] = 0
shopdata6['transactions_99'] = shopdata6[shopdata6['dept'] == 99].groupby(['id', 'dept'])['transaction_99'].cumsum()

更新:

代码语言:javascript
运行
复制
id dept  date   purchase purchase_count_dept99(desired)

id1 199  date1  $10       0    

id1 99  date1  $10       1

id1 100 date1  $50       1

id1 99  date2  $30       2

id2 100 date1  $10       0

id2 99  date1  $10       1

id3 99 date3  $10        1

应用了以下内容:

代码语言:javascript
运行
复制
shopdata6['transaction_99'] = np.where(shopdata6['dept']==99, 1, 0)
shopdata6['transaction_99'] = shopdata6.groupby(['id'])['transaction_99'].transform('cumsum')

结果看起来不错,但它是正确的吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-04-19 01:06:00

代码语言:javascript
运行
复制
shopdata6['transaction_99'] = np.where(shopdata6['dept']==99, 1, 0)
shopdata6['transaction_99'] = shopdata6.groupby(['id'])['transaction_99'].transform('cumsum')
票数 0
EN

Stack Overflow用户

发布于 2019-04-14 02:58:09

你的代码应该被简化:

代码语言:javascript
运行
复制
s = (shopdata6['dept']==99).astype(int)
shopdata6['transaction_99'] = s.groupby(shopdata6['id']).cumsum()
print (shopdata6)
    id  dept   date purchase  purchase_count_dept99(desired)  transaction_99
0  id1   199  date1      $10                               0               0
1  id1    99  date1      $10                               1               1
2  id1   100  date1      $50                               1               1
3  id1    99  date2      $30                               2               2
4  id2   100  date1      $10                               0               0
5  id2    99  date1      $10                               1               1
6  id3    99  date3      $10                               1               1
票数 0
EN

Stack Overflow用户

发布于 2019-04-14 05:36:39

如果我正确理解了您的问题,您需要.cumcount()

代码语言:javascript
运行
复制
df["transaction_99"] = df[df["dept"] == 99].groupby("id").cumcount()

要使计数从1开始,只需添加以下内容。

代码语言:javascript
运行
复制
df["transaction_99"] = df["transaction_99"] + 1
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55668238

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档