Python и Pandas: применяются для нескольких столбцов - PullRequest
0 голосов
/ 14 мая 2019

Я новичок в python, и мне удалось использовать apply в фрейме данных для создания нового столбца внутри фрейма данных.

X['Geohash']=X[['Lat','Long']].apply (lambda column: geohash.encode(column[0],column[1],precision=8), axis=1)

это вызывает функцию geohash с широтами и долготами в строке ина столбец.

Теперь у меня есть два новых фрейма данных, один для Широты и один для Долготы.Каждый фрейм данных имеет двадцать столбцов, и я хочу, чтобы

.apply (lambda column: geohash.encode(column[0],column[1],precision=8), axis=1)

вызывался двадцать раз.

-Первый раз первый столбец данных-Широта с первым столбцом данных-Долгота, затем

-второй второй столбец данных-Широта со вторым столбцом данных-Долгота.

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

.apply (lambda column: geohash.encode(column[0],column[1],precision=8), axis=1)

Что я хочу получить, так это новый кадр данных с двадцатью столбцами, каждый из которых является результатом функции geohash.

Идеи будут оценены.

1 Ответ

1 голос
/ 14 мая 2019

Вы можете сделать это, создав «пустой» фрейм данных с 20 столбцами, а затем с помощью df.columns [i] перебрать другие ваши фреймы данных - что-то вроде этого:

output = pd.DataFrame({i:[] for i in range(20)})

Это создаетпустой фрейм данных со всеми столбцами, которые вы хотели (пронумерованы).

Теперь, скажем, кадры данных долготы и широты называются 'lon' и 'lat'.Нам нужно объединить их в один фрейм данных. Тогда:

lonlat = lat.join(lon)
for i in range(len(output.columns)):
    output[output.columns[i]] = lonlat.apply(lambda column: geohash.encode(column[lat.columns[i]], 
                                                            column[lon.columns[i]],
                                                            precision=8), axis=1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...