【问题标题】:How do I compare two columns at once against two different data frames in python (pandas)?如何一次将两列与python(熊猫)中的两个不同数据框进行比较?
【发布时间】:2017-07-27 08:56:26
【问题描述】:

df1 包含两列 Lat 和 Long,以及数千行。 df2 还包含两列 lat 和 long 以及许多行。本质上,df2 是我想要比较 df1 的参考位置列表。我想比较 df1 和 df2 的纬度和经度,说它们的位置匹配,或者说它们不匹配。即,

my_data = pd.read_csv('/path/to/file', usecols = ['Lat','Lon'])
reference_data = pd.read_csv('/path/to/file', usecols = ['Lat','Lon'])

简单来说,我想说的是,如果 my_data 中每一行中的位置存在于 reference_data 中,则将其标记为 1,否则将其标记为 0。由于此位置有两个分量 Lat 和 Long,因此它们都需要存在在参考数据框中的任何位置彼此相邻。有没有简单的单线?

【问题讨论】:

    标签: python-2.7 pandas dataframe


    【解决方案1】:

    您可以通过使用合并函数将 reference_data 连接到带有指示器的 my_data 来生成它。

    new_df = pd.merge(my_data, reference_data, on=['Lat','Lon'], how='left', indicator='flag')
    

    您将获得一个看起来与 my_data 完全相同的数据框,但包含一个新列“flag”,该列显示“left_only”或“both”。

    将其作为 [0,1] 标签获取:

    new_df['bin_flag'] = (new_df['flag']=='both').astype(int)
    

    据我所知,这个没有真正的单线。

    【讨论】:

      【解决方案2】:

      你也可以这样做:

      my_data.apply(lambda x: (x['Lat'] in reference_data['Lat'] and x['Lon'] in reference_data['Lon']) * 1.0, axis=1)
      

      然后您可以随意分配它。

      或者,同样的方式,但可能更容易看到发生了什么:

      my_data.apply(lambda x: ((x['Lat'], x['Lon']) in zip(reference_data['Lat'], reference_data['Lon'])) * 1.0, axis=1)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-13
        相关资源
        最近更新 更多