Я застрял на 3 часа по этой проблеме. У меня есть DF, подобный этому: p = заказ продукта = количество продаж
У меня нет даты выпуска продукта, поэтому я предполагаю, что дата выпуска является первой датой с некоторыми продажами.
Вот мой фрейм данных:
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
, кажется, работает, но это занимает слишком много времени ....
я уверен, что есть это простой способ, но не могу найти идентификатор. заранее спасибо ...
Редактировать:
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
обычно имеют 0 в начале каждой группы. ('P'), но я мог бы в конечном итоге получить непосредственно некоторые фактические значения. И я могу иметь 0 ордеров однажды (что возвращает счетчик 0 здесь), но все еще хочу мой счетчик с даты выпуска продукта
Мне действительно удалось получить свои результаты, добавив фиктивный столбец только с "1" и делающий df [df.o '> 0] .groupby (' p '). cumsum (), но я не думаю, что это действительно интересно ...