#python #arrays #loops #pyspark #difference
Вопрос:
У меня есть столбец массивов, состоящий из чисел , т. Е. [0,80,160,220]
, и я хотел бы создать столбец массивов различий между соседними терминами, т. е. [80,80,60]
У кого-нибудь есть идея, как подойти к этому в Python или PySpark? Я думаю о чем-то итеративном (i-й срок минус i-1-й срок, начинающийся со второго срока), но я действительно застрял в том, как это закодировать. Спасибо!
Комментарии:
1.
[arr[i] - arr[i - 1] for i in range(1, len(arr))]
2. Отвечает ли приведенный ниже ответ на ваш вопрос? Или у вас есть какие-то сомнения?
Ответ №1:
Редактировать:
d=[0,80,160,220] df=pd.DataFrame(d,columns= ['col_list']) df['col_new']=df['col_list'].diff() print(df) #output col_list col_new 0 0 NaN 1 80 80.0 2 160 80.0 3 220 60.0
Кроме того, если вы хотите удалить строку с NaN
помощью, вы можете сделать:
df.dropna(subset = ['col_new']) #output col_list col_new 1 80 80.0 2 160 80.0 3 220 60.0
Комментарии:
1. Спасибо. При попытке сделать это я получаю «ошибку типа:» объект int не является интерактивным», но первое решение, использующее диапазон, работает
2. Но я изначально забыл сказать, что хочу создать столбец list_differences на основе другого столбца, содержащего массивы в фрейме данных. Извините, что изначально я не был достаточно конкретен. Я попытался расширить рабочее решение [arr[i] — arr[i — 1] для i в диапазоне(1, len(arr))] кому: df=df.С колонкой(‘col_new’, [F. col(‘col_list'[i]) — F. col(‘col_list'[i — 1]) для i в диапазоне(1, F. размер(col(‘col_list’)))]), но это приводит к ошибке типа: объект «столбец» не может быть интерпретирован как целое число. Когда я изменяю диапазон на диапазон(1,2) для упрощения, он выдает: AssertionError: col должен быть столбцом’. Есть какие-нибудь идеи?