2015-10-08 5 views
0

У меня есть этот dataframe, я пытаюсь создать новый столбец, где я хочу сохранить разницу продуктов, продаваемых на основе кода и даты. , например, это начиная dataframe:Выполнение различий между строками в pandas на основе значений столбцов

 date  code sold 
0 20150521 0 47 
1 20150521 12 39 
2 20150521 16 39 
3 20150521 20 38 
4 20150521 24 38 
5 20150521 28 37 
6 20150521 32 36 
7 20150521 4 43 
8 20150521 8 43 
9 20150522 0 47 
10 20150522 12 37 
11 20150522 16 36 
12 20150522 20 36 
13 20150522 24 36 
14 20150522 28 35 
15 20150522 32 31 
16 20150522 4 42 
17 20150522 8 41 
18 20150523 0 50 
19 20150523 12 48 
20 20150523 16 46 
21 20150523 20 46 
22 20150523 24 46 
23 20150523 28 45 
24 20150523 32 42 
25 20150523 4 49 
26 20150523 8 49 
27 20150524 0 39 
28 20150524 12 33 
29 20150524 16 30 
... ... ... ... 
150 20150606 32 22 
151 20150606 4 34 
152 20150606 8 33 
153 20150607 0 31 
154 20150607 12 30 
155 20150607 16 30 
156 20150607 20 29 
157 20150607 24 28 
158 20150607 28 26 
159 20150607 32 24 
160 20150607 4 30 
161 20150607 8 30 
162 20150608 0 47 

Я думаю, что это может быть решением ...

full_df1=full_df[full_df.date == '20150609'].reset_index(drop=True) 
    full_df1['code'] = full_df1['code'].astype(float) 
    full_df1= full_df1.sort(['code'], ascending=[False]) 

    code date  sold 
8 32 20150609 33 
7 28 20150609 36 
6 24 20150609 37 
5 20 20150609 39 
4 16 20150609 42 
3 12 20150609 46 
2 8 20150609 49 
1 4 20150609 49 
0 0 20150609 50 





    full_df1.set_index('code')['sold'].diff().reset_index() 

, который дает мне обратно этот выход на одну дату 20150609:

code difference 
0 32 NaN 
1 28 3 
2 24 1 
3 20 2 
4 16 3 
5 12 4 
6 8 3 
7 4 0 
8 0 1 

есть лучшее решение, чтобы иметь тот же результат в более питоническом ключе? Я хотел бы создать новый столбец [разницу] и сохранить данные, имеющие в результате 4 столбца [дата, код, проданный, разность]

+0

Похоже, все, что вы делаете, это просто 'ДФ [ 'разница'] = df.groupby ('дата') [ 'продается']. Преобразование (pd.Series.diff)' – EdChum

ответ

1

Это именно то, для чего построена функция группы панды, и Я настоятельно рекомендую прочитать и проработать эту документацию: panda's groupby documentation

Этот код воспроизводит то, о чем вы просите, но на каждую дату.

df = pd.DataFrame({'date':['Mon','Mon','Mon','Tue','Tue','Tue'],'code':[10,21,30,10,21,30], 'sold':[12,13,34,10,15,20]}) 
df['difference'] = df.groupby('date')['sold'].diff() 

df 

    code date sold difference 
0 10  Mon  12  NaN 
1 21  Mon  13  1 
2 30  Mon  34  21 
3 10  Tue  10  NaN 
4 21  Tue  15  5 
5 30  Tue  20  5 
Смежные вопросы