Скажем, у меня есть следующий фрейм данных,
df.head()
ID start end symbol symbol_id type
1 146 291 bus bus-201 CDS
1 146 314 bus bus-201 trans
1 603 243 bus bus-201 CDS
1 1058 2123 car car-203 CDS
1 910 81 car car-203 ex
1 2623 2686 car car-203 CDS
1 5948 6043 car car-203 CDS
1 6348 6474 car car-203 CDS
1 910 81 car car-201 ex
1 910 81 car car-201 ex
1 636 650 car car-203 CDS
1 202 790 train train-204 CDS
1 200 314 train train-204 CDS
1 202 837 train train-204 CDS
Теперь из вышеупомянутого фрейма данных мне нужно сгруппировать элементы по столбцу symbol_id
, если столбец type
равен CDS
. Затем мне нужно использовать первое значение из столбца start
в качестве значения в start column of the new data frame and last value from column
end as the value in column
end`.
Наконец, df2
должен выглядеть так:
start end symbol symbol_id type
146 243 bus bus-203 CDS
1058 650 car car-203 CDS
202 837 train train-204 CDS
Я пытался использовать list
значений из df['symbol']
,
sym_list=df['symbol'].tolist().drop_duplicates()
for symbol in df['symbol'].values:
if symbol in tuple(sym_list):
df_symbol =df['symbol'].isin(symbol)
, которые бросилиследующая ошибка,
TypeError: only list-like objects are allowed to be passed to isin(), you passed a [str]
Я пытался захватить первое и последнее значение для каждого значения symbol
и symbol_id
, используя,
start = df.query('type =="CDS"')[['start']].iloc[0]
end = df.query('type =="CDS"')[['end']].iloc[-1]
Однако мой фрейм данныхдовольно большой, и у меня есть более 50 000 уникальных значений для symbol
, поэтому мне нужно лучшее решение здесь.
Любая помощь или предложения приветствуются !!