繁体   English   中英

pandas:groupby + 条件 + 遍历列

[英]pandas : groupby + condition + iterate over a column

我在这个问题上被困了 3 个小时。 我有一个这样的 DF:p = 产品订单 = 销售数量

我没有产品的发布日期,所以我假设发布日期是第一个有销售的日期。

这是我的 dataframe:

p order
A  0     
A  0     
A  1     
A  1       
A  2     
B  0     
B  0     
B  1     
B  1     

这就是我想要的:d_s_r 列上自发布以来的天数(自发布以来的天数)。

p order d_s_r
A  0      0
A  0      0
A  1      1
A  1      2  
A  2      3
B  0      0
B  0      0
B  1      1
B  1      2

你的建议是什么:

我试过了:

for i, row in data[data.order > 0].groupby('p') :
    list_rows = row.index.tolist()
    for m, k in enumerate(list_rows):
        data.loc[k,'s_d_r'] = m +1

似乎工作,但它需要太多时间......

我确定有一个简单的方法,但找不到 id。 提前致谢...

编辑:

Here's my df : 
df = pd.DataFrame([['A',0,0],['A',0,0],['A',12,1],['A',23,5],['A',25,7]
                ,['B',0,0],['B',2,0],['B',8,5],['B',15,12],['B',0,3],['B',0,3],['B',5,4]], columns=['prod','order','order_2'])

with the df.groupby('prod')['order'].transform(lambda x : x.cumsum().factorize()[0])

我得到:



prod    order   order_2 d_s_r
0   A   0   0   0
1   A   0   0   0
2   A   12  1   1
3   A   23  5   2
4   A   25  7   3
5   B   0   0   0
6   B   2   0   1
7   B   8   5   2
8   B   15  12  3
9   B   0   3   3
10  B   0   3   3
11  B   5   4   4

当我想:


prod    order   order_2 d_s_r
0   A   0   0   0
1   A   0   0   0
2   A   12  1   1
3   A   23  5   2
4   A   25  7   3
5   B   0   0   0
6   B   2   0   1
7   B   8   5   2
8   B   15  12  3
9   B   0   3   4
10  B   0   3   5
11  B   5   4   6

通常在每个 groupby.('p') 的开头都有 0,但我最终可以直接有一些实际值。 而且我可以,某天有 0 个订单(这将这里的计数器设置为 0),但自产品发布之日起仍然想要我的计数器


实际上,我设法通过添加一个只有“1”的虚拟列并通过执行 df[df.o' > 0].groupby('p').cumsum() 来获得我的结果,但我认为这并不有趣。 ..

groupby on p + cumsum on order with factorize

df['d_s_r'] = df.groupby('p')['order'].cumsum().factorize()[0]
print(df)

   p  order  d_s_r
0  A      0      0
1  A      0      0
2  A      1      1
3  A      1      2
4  A      2      3
5  B      0      0
6  B      0      0
7  B      1      1
8  B      1      2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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