Python和Pandas:每多列应用

时间:2019-05-14 07:37:37

标签: pandas multiple-columns apply

我是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)

被称为二十次。

-第一次第一次 dataframe-Latitude列,然后是第一个dataframe-Longitude列

-第二次,第二个dataframe-Latitude列和第二个dataframe-Longitude列。

我如何按列进行每次迭代,并在每次迭代时调用

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

我想要得到的是一个新的数据框,其中包含二十列,每一列都是geohash函数的结果。

想法将不胜感激。

1 个答案:

答案 0 :(得分:1)

您可以通过创建一个具有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)