比较两个不等长的数据帧

时间:2017-12-07 22:08:19

标签: python pandas

我有两个相当大的数据框。

mega_df.head()

L_Day             back_hr    Lat        Lon     AGL  Pressure   BT_time
1998-01-01 11:00:00   0     75.197  -150.045    1000    900.8   1998-01-01 11:15:00
1998-01-01 11:00:00 -0.2    75.245  -150.001    1002.4  900.5   1998-01-01 11:00:00
1998-01-01 11:00:00 -1.2    75.447  -149.863    1011.2  899.2   1998-01-01 10:00:00
1998-01-01 11:00:00 -2.2    75.661  -149.785    1019.3  898.3   1998-01-01 09:00:00
1998-01-01 11:00:00 -3.2    75.887  -149.762    1028.1  897.1   1998-01-01 08:00:00
1998-01-01 11:00:00 -4.2    76.124  -149.778    1038.3  895.9   1998-01-01 07:00:00
1998-01-01 11:00:00 -5.2    76.368  -149.818    1051.1  894.3   1998-01-01 06:00:00
1998-01-01 11:00:00 -6.2    76.607  -149.882    1065.2  892.5   1998-01-01 05:00:00
1998-01-01 11:00:00 -7.2    76.832  -149.969    1078    890.9   1998-01-01 04:00:00

df.head()

    ID            Lat   Lon   Elevation State   Name         FirstYr    LastYr  NObs
0   ACM0007886  17.117  -61.783 10.0    NaN COOLIDGE FIELD (UA) 1947    1993    13896
1   AEM0004121  24.433  54.650  16.0    NaN ABU DHABI INTERNA   1983    2017    35306
2   AEXUAE0546  25.250  55.370  4.0     NaN SHARJAH             1935    1942    2477
3   AFM0004091  36.700  67.200  378.0   NaN MAZAR-I-SHARIF      2010    2014    2179
4   AFM0004091  36.666  68.916  433.0   NaN KUNDUZ              2010    2013    4540

我想要的是获得唯一的L_Day,其中mega_df中的Lat,Lon点接近df中的值。对于Eg;唯一的L_Day值(Lat in mega_df - Lat in df)<值AND(Lon in mega_df - Lon in df)<值。我想要这个"价值"要灵活。到目前为止,我想出了这个:

for la, lo in zip(list(df.lat), list(df.lon)):
    print(mega_df.index[((mega_df.Lat - la) < 0.005) &((mega_df.Lon - lo) < 0.005)].unique())

我的第一个问题是,有没有更快(熊猫内置函数)来做到这一点?我无法使用pd.isin(),因为我没有寻找完全匹配。 pd.subtract()的语法表示我要用等效系列减去。

其次,我想从df获取上述条件令人满意的电台名称。我能带来的是:

for la, lo in zip(list(df.lat), list(df.lon)):
    for mla,mlo in zip(list(mega_df.Lat), list(mega_df.Lon)):
        if (((mla - la) < 0.05) & ((mlo - lo) < 0.05)):
            print(df4.Name[(df4['Lat'] == la) & (df4['Lon'] == lo)].unique())

这看起来非常低效,因为我的两个数据框都很大,甚至在等待30分钟以后甚至不能在jupyter笔记本中给我任何输出。我怎样才能以有效的方式做到这一点?

len(mega_df)
>>214170
len(df)
>>2761

谢谢!

0 个答案:

没有答案