2015-11-28 6 views
1

У меня есть следующие DataFrame:панды: найти первый погружено продукт от DataFrame

product_id  shipping_date     price  quantity 
    AX-11   2014-11-02T01:00:04+00:00  200   1 
    BA-45   2012-05-23T01:00:02+00:00  4000   5 
    XF-55   2011-01-12T01:00:07+00:00  400   10 
    .................................................................. 

Я пытаюсь получить продукт, который был отправлен первым, ответ должен быть XF-55, так как он был отправлен в 2011-01-12T01:00:07+00:00 ,

Я попытался следующий код, и это не похоже на работу:

df2 = df.groupby('product_id')['shipping_date'].transform("min") 

Это просто дает мне новую DataFrame с product_id и они не сортируются на всех. Как я могу получить product_id первого отправленного продукта?

ответ

1

Используйте idxmin(), чтобы получить индекс строки самой ранней даты отгрузки. Затем вы можете использовать loc, чтобы получить значение в этой строке из колонки продукт ID:

>>> df.loc[df['shipping_date'].idxmin(), 'product_id'] 
'XF-55' 
+0

Я получаю 'ValueError: неверный буквальным для поплавка(): 2015-11-20T21: 17: 52 + 00 : 00' ошибка, когда я использую этот код – cyberbemon

+0

Я не уверен, как эта ошибка возникает из-за применения этого кода к вашему примеру DataFrame. Столбец «shipping_date» dtype datetime64? Если не сделать 'df ['shipping_date'] = pd.to_datetime (df ['shipping_date']) сначала. –

+0

Спасибо, что сработало. – cyberbemon

-1

Я хотел бы использовать argsort Numpy для этого:

sortidx = np.argsort(df['shipping_date']) 

Это дает массив индексов, какой вид данных. Таким образом, первым индексом в возвращаемом массиве является индекс самого низкого shipping_date. Затем:

df['product_id'][sortidx[0]] 

Должно получиться именно то, что вы хотите.

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