如何在pandas的两列中形成元组列

我有一个pandas数据框,我想结合“拉”和“长”列形成一个元组。

<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) 

我试图使用的代码是:

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

但是,这返回了以下错误:

 --------------------------------------------------------------------------- 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 

我怎么解决这个问题?

使用zip舒适。 处理列数据时,它会派上用场。

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

它比使用applymap更简单,更快捷。 类似np.dstack速度是zip两倍,但不会给你元组。

 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) 

pandas有itertuples方法来做到这一点:

 list(df[['lat', 'long']].itertuples(index=False, name=None))