熊猫:应用特定函数列和创建等栏目

问题描述 投票:1回答:4

我有这样的地理坐标数据帧大熊猫df

    lat         lon         
0   48.01025772 -6.15690851 
1   48.02164841 -6.10588741 
2   48.03302765 -6.05480051 
... ...         ...

我需要将这些坐标转换为不同的系统,并对此有一个专门的功能。我打算创建两个新列,df['N']这与lat配对,以及与df['E']配对lon

这是不相关的函数看起来像什么,所以为了简单起见,我们称之为F。功能操作是这样的:E, N = f(float(lat), float(lon))

有没有一种方法,我可以通过df的所有行迭代,提取lat,lon对,(计算它们的转化),并指定值相关的列?

python loops pandas dataframe
4个回答
2
投票

您可以在DF使用apply并通过axis=1,在你的函数,你应该返回Series并直接分配2列:

In [207]:
def foo(lat, lon):
    return pd.Series([lat + 10, lon * 100])
​
df[['new_lat','new_lon']] = df.apply(lambda x: foo(x['lat'], x['lon']), axis=1)
df

Out[207]:
         lat       lon    new_lat   new_lon
0  48.010258 -6.156909  58.010258 -615.6909
1  48.021648 -6.105887  58.021648 -610.5887
2  48.033028 -6.054801  58.033028 -605.4801

根据可以而且应该避免你的功能是通过做apply


2
投票

您可以使用:

df[['lat', 'lon']].apply(lambda row: f(float(row['lat']), float(row['lon']), axis=1)

2
投票

您可避免产生pd.Series,因为它需要大量的时间,并通过result_type='expand'说法代替。这明显快运行在大Dataframes

def foo(lat, lon):
    return [lat + 10, lon * 100]

df[['new_lat','new_lon']] = df.apply(lambda x: foo(x['lat'], x['lon']), axis=1, result_type='expand')

在我的数据框下面的时间达到了:纯申请(不分配,返回列表) - 27秒,与result_type='expand' - 30秒,以回报pd.Series(...) - 41秒。

© www.soinside.com 2019 - 2024. All rights reserved.