[英]how to iterate over pandas dataframe over multiple column groupBy in python
[英]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.