【问题标题】:Overwrite values in a dataframe with values from other dataframe in pandas python用pandas python中其他数据帧的值覆盖数据帧中的值
【发布时间】:2017-12-19 15:07:32
【问题描述】:

我有两个数据框。一个带有站点坐标,另一个带有它们之间的连接。 例如:

df1:

SITE_ID     LAT       LON
101       23.4244   31.5356
102       45.0090   14.2424
103       35.3444   19.4242
104       42.0000   18.0002

df2

SITE_ID  FIRST  SECOND  THIRD
101       102    104     NaN 
102       103    NaN     NaN
103       104    NaN     NaN
104       NaN    NaN     NaN

现在我想用 df1 的坐标更改 df2 中的所有值(在所有列中)。 期望的输出:

 SITE_ID              FIRST               SECOND       THIRD
23.4244 31.5356    45.0090 14.2424   42.0000 18.0002   NaN 
45.0090 14.2424    35.3444 19.4242          NaN        NaN
35.3444 19.4242    42.0000 18.0002          NaN        NaN
42.0000 18.0002        NaN                  NaN        NaN

可以对这个白色逗号稍作改动或放入列表。稍后我会将其转换为 json 并将其与 javascript google maps api 一起使用。 老实说,我没有太多想法,我尝试过转换为dict,或者在合并时覆盖,但直到最后都没有真正的效果。

【问题讨论】:

    标签: python pandas dictionary dataframe merge


    【解决方案1】:

    这是一种方法,从 df1 创建映射并替换 df2 中的值

    In [1120]: mapping = df1.set_index('SITE_ID').astype(str).apply(' '.join, axis=1).to_dict()
    
    In [1121]: mapping
    Out[1121]:
    {101: '23.4244 31.5356',
     102: '45.009 14.2424',
     103: '35.3444 19.4242',
     104: '42.0 18.0002'}
    
    In [1122]: df2.replace(mapping)
    Out[1122]:
               SITE_ID            FIRST        SECOND  THIRD
    0  23.4244 31.5356   45.009 14.2424  42.0 18.0002    NaN
    1   45.009 14.2424  35.3444 19.4242           NaN    NaN
    2  35.3444 19.4242     42.0 18.0002           NaN    NaN
    3     42.0 18.0002              NaN           NaN    NaN
    

    【讨论】:

      猜你喜欢
      • 2019-07-14
      • 2022-07-06
      • 2022-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-09
      • 1970-01-01
      • 2020-01-24
      相关资源
      最近更新 更多