Сортировка и выбор элементов в кадре данных на основе отношений между двумя значениями двух столбцов во втором кадре данPython

Программы на Python
Ответить Пред. темаСлед. тема
Гость
 Сортировка и выбор элементов в кадре данных на основе отношений между двумя значениями двух столбцов во втором кадре дан

Сообщение Гость »

У меня есть два фрейма данных: df_characteristics и df_prices, которые содержат информацию о наборе объектов.
Оба фрейма данных имеют столбец с именем «uid» (уникальный идентификатор некоторых объектов). UID обоих фреймов данных одинаковы, они относятся к одним и тем же объектам. Однако в первом кадре данных каждый объект имеет только одну запись (одну строку), а во втором каждый объект имеет несколько записей:

Код: Выделить всё

df_characteristics
index   uid char1   char2   char3
0       123 'blah'  'blah'  'blah'
1       456 'blah'  'blah'  'blah'
...     ...  ...     ...     ...
40      987 'blah'  'blah'  'blah'

df_prices
index   uid date        price
0       123 02-02-2000  11100
1       123 01-01-2000  22200
2       123 03-03-2000  44000
3       123 04-04-2000  66000
4       456 03-03-2000  77700
5       456 02-02-2000  88800
6       456 04-04-2000  66600
...     ... ...         ...
98      987 01-01-2005  12300
99      987 04-04-2005  45600
100     987 05-05-2005  78900
Мне нужно:
  • рассмотреть все uids из первого кадра данных,
  • сгруппировать второй кадр данных с группой (строк) для каждого uid,
  • отсортировать каждую группу (т. е. каждый uid) по столбцу «дата»,
  • возьмем элемент в столбце «цена», соответствующий «самой старой»
    (минимальной) дате для каждой группы,
  • наконец, создадим новый столбец в первый кадр данных (df_characteristics) и вставьте цену, найденную на предыдущих шагах, в соответствии с (каждым) одинаковым uid.
Итак, необходимый результат для первый кадр данных:

Код: Выделить всё

df_characteristics
index   uid char1   char2   char3   price
0       123 'blah'  'blah'  'blah'  22200
1       456 'blah'  'blah'  'blah'  88800
...     ...  ...     ...     ...    ...
40      987 'blah'  'blah'  'blah'  12300
Мне удалось добиться результата с помощью iterrows:

Код: Выделить всё

df_characteristics['price']  = pd.Series(dtype='int')

for index, row in df_characteristics.iterrows():
uid = row['uid']
group = df_prices.loc[df_prices['uid']==uid]
groupsorted = group.sort_values('date')
firstrow = groupsorted.iloc[0]
price = firstrow['price']
df_characteristics.at[index, 'price'] = price
Однако для оптимизации скорости мне нужен векторизованный код pandas.
Я тщательно проверил все вопросы/ответы в этом вопросе, но ни одного из них подходит для моей задачи. В частности, в своей задаче я не могу использовать сводку, так как мне не нужны агрегированные данные. Мне нужно отсортировать данные по «дате», а затем выбрать один элемент в столбце «цена», тот, который находится в той же строке, что и самая старая отсортированная дата. Итак, никакого агрегирования и поворота.

Подробнее здесь: https://stackoverflow.com/questions/783 ... etween-two
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»