2015-03-08 2 views
1

Так я это DataFrame с 3 колонками «Order ID 'Количество заказа' и 'Fill Кол-во'Python Панды GroupBy(). Sum() Наличие пункта

Я хочу суммировать Заливка Кол-во в порядке затем сравнить это для Order Qty. В идеале я верну только блок данных, который дает мне идентификатор заказа, когда агрегированный Fill Qty больше, чем Order Qty.

В SQL Я думаю, что я ищу это

SELECT * FROM DataFrame GROUP BY Order ID, Order Qty HAVING sum(Fill Qty)>Order Qty 

До сих пор у меня есть это:

SumFills= DataFrame.groupby(['Order ID','Order Qty']).sum() 

выход:


....................................Fill Qty 

Order ID - Order Qty -   
1--------- 300  ---------  300 

2 ---------  80 -----------   40 

3 --------- 20  -----------  20 

4  --------- 110  ----------  220 

5  --------- 100  ----------  200 

6 --------- 100   ---------- 200 

Выше агрегатируется уже, я бы в идеале хотел бы вернуть список/массив [4,5,6], поскольку те имеют sum(fill qty) > Order Qty

+0

Имеются ли в ваших данных несколько строк, где идентификатор заказа совпадает? Если да, то порядок QTY остается статическим для всех этих строк? – kennes

+0

Каждый заказ будет иметь одну запись, так что да, каждый идентификатор заказа имеет ровно один связанный с ним номер заказа – Adam

ответ

2

Смотреть оригинал dataframe:

In [57]: print original_df 
    Order Id Fill Qty Order Qty 
0   1  419  334 
1   2  392  152 
2   3  167  469 
3   4  470  359 
4   5  447  441 
5   6  154  190 
6   7  365  432 
7   8  209  181 
8   9  140  136 
9   10  112  358 
10  11  384  302 
11  12  307  376 
12  13  119  237 
13  14  147  342 
14  15  279  197 
15  16  280  137 
16  17  148  381 
17  18  313  498 
18  19  193  328 
19  20  291  193 
20  21  100  357 
21  22  161  286 
22  23  453  168 
23  24  349  283 

Создание и просмотр нового dataframe суммируя Наполните Кол-во:

In [58]: new_df = original_df.groupby(['Order Id','Order Qty'], as_index=False).sum() 

In [59]: print new_df 
    Order Id Order Qty Fill Qty 
0   1  334  419 
1   2  152  392 
2   3  469  167 
3   4  359  470 
4   5  441  447 
5   6  190  154 
6   7  432  365 
7   8  181  209 
8   9  136  140 
9   10  358  112 
10  11  302  384 
11  12  376  307 
12  13  237  119 
13  14  342  147 
14  15  197  279 
15  16  137  280 
16  17  381  148 
17  18  498  313 
18  19  328  193 
19  20  193  291 
20  21  357  100 
21  22  286  161 
22  23  168  453 
23  24  283  349 

Slice новый dataframe только к тем строкам, где Заполненная Кол-во> заказ Кол-во:

In [60]: new_df = new_df.loc[new_df['Fill Qty'] > new_df['Order Qty'],:] 

In [61]: print new_df 
    Order Id Order Qty Fill Qty 
0   1  334  419 
1   2  152  392 
3   4  359  470 
4   5  441  447 
7   8  181  209 
8   9  136  140 
10  11  302  384 
14  15  197  279 
15  16  137  280 
19  20  193  291 
22  23  168  453 
23  24  283  349 
+0

Большое спасибо! – Adam

+0

Нет проблем, не возражаете ли вы отметить это как решение? Благодарю. – kennes

Смежные вопросы