Pandas DataFrame проверяет условие перед указанной c строкой - PullRequest
0 голосов
/ 06 января 2020

DataFrame

У меня есть вышеупомянутый DataFrame с миллионами строк и wi sh для группировки (['Instrument', 'Date']) для некоторого анализа данных.

I sh для сравнения последней строки каждой группы с предыдущим значением, которое является первым, равным или превышающим значение последней строки. Например, как показано на рисунке, прибор AAD на дату 18.04.2012 имеет значение 32437,5 на время 9:59:44. Первое, которое превысит или будет равно этому значению, находится в момент времени 9:42:39 AM со значением 37491,87 -> это результат, который я хочу.

Если я буду sh кодировать с Pandas Python, могу я узнать, какой код лучше всего подходит для этого сценария?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 06 января 2020

Это должно работать,

def f(grp):

  return grp.loc[(grp>=grp.iloc[-1])].iloc[0]

res = df.groupby(['Instrument', 'Date'])['Value'].agg(lambda x: f(x))
res.head()

Если вы не уверены, что всегда будет значение выше, чем в последней строке, используйте следующее f().

def f(grp):
  try:
    return grp.loc[(grp>=grp.iloc[-1])].iloc[0]
  except IndexError:
    return np.nan
0 голосов
/ 06 января 2020

Если вы не отредактировали фрейм данных для последнего значения, чтобы оно стало первым для сравнения с ним, или вы создали какой-то временный массив / буфер для хранения и сравнения значений, вам нужно будет выполнить две проверки, сначала чтобы найти последний ряд группы, а затем найти первое значение обгона в группе. Я рекомендую вам создать массив, в котором будут храниться значения группы, затем взять последнее значение и выполнить инструкцию 'while not'

group = [1,2,3,4,5,6,3]

overtake = False
while not overtake:
  for i in group:
    if group[i] >= group[-1]:
        overtake_value = group[i]
        overtake = True
        break
print(overtake_value)

>> 3

Вам просто нужен способ получить столбец значений в группе назначенный временному массиву для работы этого метода

примечание для редактирования: массив / список должен содержать записи значений группы, то есть только одномерный массив.

...