【问题标题】:Python and Pandas: apply per multiple columnsPython 和 Pandas:按多列应用
【发布时间】:2019-05-14 07:37:37
【问题描述】:

我是 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 列然后

-第二次,第二个数据框-纬度列与第二个数据框-经度列。

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

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

我想要的是一个新的数据框,它有 20 列,每列都是 geohash 函数的结果。

我们将不胜感激。

【问题讨论】:

  • 你有 2 个数据名,每个都有一个 LatitudeLongtitude 列?
  • @Alex P 您的要求令人困惑。如果你也提到你的虚拟输入和预期输出,那就很容易回答了。
  • 我在考虑。我的代码不可重现。您对我如何获取大数据框并将它们制作成可以创建此类数据框的代码有任何建议吗?
  • 我有两个数据框。一个只有纬度和二十列。另一个只有经度和二十列。二十列只是不同的时间快照

标签: pandas multiple-columns apply


【解决方案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)

【讨论】:

  • 太棒了。我能够为我的代码编辑你的代码,它完全按照我的需要工作。非常感谢。真的!不幸的是,我不能投票给你。
  • 很高兴能帮上忙!既然您提出了这个问题,您可以通过点击赞成/反对箭头下方的星号来接受我的回答。
  • 是的!我不知道这个!
猜你喜欢
  • 2016-01-16
  • 2019-02-04
  • 1970-01-01
  • 1970-01-01
  • 2017-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-27
相关资源
最近更新 更多