How to form a column of a tuple of two columns in Pandas

I have a DataFrame Pandas and I want to combine the lat and long columns to form a tuple.

<class 'pandas.core.frame.DataFrame'> Int64Index: 205482 entries, 0 to 209018 Data columns: Month 205482 non-null values Reported by 205482 non-null values Falls within 205482 non-null values Easting 205482 non-null values Northing 205482 non-null values Location 205482 non-null values Crime type 205482 non-null values long 205482 non-null values lat 205482 non-null values dtypes: float64(4), object(5) 

The code I tried to use was:

 def merge_two_cols(series): return (series['lat'], series['long']) sample['lat_long'] = sample.apply(merge_two_cols, axis=1) 

However, this led to the following error:

 --------------------------------------------------------------------------- AssertionError Traceback (most recent call last) <ipython-input-261-e752e52a96e6> in <module>() 2 return (series['lat'], series['long']) 3 ----> 4 sample['lat_long'] = sample.apply(merge_two_cols, axis=1) 5 

...

 AssertionError: Block shape incompatible with manager 

How can I solve this problem?

+93
python pandas tuples dataframe
Apr 16 '13 at 7:21
source share
3 answers

Go to the zip . This is useful when working with column data.

 df['new_col'] = list(zip(df.lat, df.long)) 

This is less complicated and faster than using apply or map . Something like np.dstack is twice as fast as zip , but will not give you tuples.

+140
Apr 17 '13 at 19:24
source share
 In [10]: df Out[10]: AB lat long 0 1.428987 0.614405 0.484370 -0.628298 1 -0.485747 0.275096 0.497116 1.047605 2 0.822527 0.340689 2.120676 -2.436831 3 0.384719 -0.042070 1.426703 -0.634355 4 -0.937442 2.520756 -1.662615 -1.377490 5 -0.154816 0.617671 -0.090484 -0.191906 6 -0.705177 -1.086138 -0.629708 1.332853 7 0.637496 -0.643773 -0.492668 -0.777344 8 1.109497 -0.610165 0.260325 2.533383 9 -1.224584 0.117668 1.304369 -0.152561 In [11]: df['lat_long'] = df[['lat', 'long']].apply(tuple, axis=1) In [12]: df Out[12]: AB lat long lat_long 0 1.428987 0.614405 0.484370 -0.628298 (0.484370195967, -0.6282975278) 1 -0.485747 0.275096 0.497116 1.047605 (0.497115615839, 1.04760475074) 2 0.822527 0.340689 2.120676 -2.436831 (2.12067574274, -2.43683074367) 3 0.384719 -0.042070 1.426703 -0.634355 (1.42670326172, -0.63435462504) 4 -0.937442 2.520756 -1.662615 -1.377490 (-1.66261469102, -1.37749004179) 5 -0.154816 0.617671 -0.090484 -0.191906 (-0.0904840623396, -0.191905582481) 6 -0.705177 -1.086138 -0.629708 1.332853 (-0.629707821728, 1.33285348929) 7 0.637496 -0.643773 -0.492668 -0.777344 (-0.492667604075, -0.777344111021) 8 1.109497 -0.610165 0.260325 2.533383 (0.26032456699, 2.5333825651) 9 -1.224584 0.117668 1.304369 -0.152561 (1.30436900612, -0.152560909725) 
+50
Apr 16 '13 at 9:13
source share

Pandas has an itertuples way of doing just that:

 list(df[['lat', 'long']].itertuples(index=False, name=None)) 
+10
Nov 06 '17 at 21:49
source share



All Articles