我有两个相当大的数据框。
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
谢谢!