Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Pandas: apply a specific function to columns and create other columns

I have a pandas dataframe df with geographical coordinates like this:

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

I need to convert these coordinates into a different system, and have a dedicated function for this. I plan to create two new columns, df['N'] which is paired with lat, and df['E'] which is paired with lon.

It's not relevant what the function looks like, so for simplicity let's call it f. The function operates like this: E, N = f(float(lat), float(lon))

Is there a way I can iterate through all rows of df, extract the lat,lon pair, (compute their transformation) and assign the values to the relevant columns?

like image 757
FaCoffee Avatar asked Dec 19 '22 09:12

FaCoffee


1 Answers

You can use apply on the df and pass axis=1, in your function you should return a Series and assign the 2 columns directly:

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

depending on what your function is doing using apply can and should be avoided

like image 156
EdChum Avatar answered Dec 21 '22 23:12

EdChum