Skip to content Skip to sidebar Skip to footer

How To Concatenate Pairs Of Row Elements Into A New Column In A Pandas Dataframe?

I have this DataFrame where the columns are coordinates (e.g. x1,y1,x2,y2...). The coordinate columns start from the 8th column (the previous ones are irrelevant for the question)

Solution 1:

You can create the new column by .apply-ing a custom list comprehension function across the different rows:

start_column =8    
coordinates_list = list(zip(df.columns[(start_column-1):-1:2],df.columns[start_column::2]))
df['coordinates'] = df.apply(lambda row: [(row[x], row[y]) 
                                          for x,y in coordinates_list if notany((pd.isna(row[x]), pd.isna(row[y])))], axis=1)

Using this example input, with the coordinate columns starting from the 8th column, as you stated in a comment:

df = pd.DataFrame(columns = ['x1','y1','x2','y2'],
                 data = [(0,0,1,0),(0,1,2,3),(-1,-2,None,None)])
for i inrange(start_column-1):
    df.insert(0,'c'+str(start_column-1-i),'x')
df

    c1  c2  c3  c4  c5  c6  c7  x1  y1  x2  y2
0   x   x   x   x   x   x   x   001.00.01   x   x   x   x   x   x   x   012.03.02   x   x   x   x   x   x   x   -1  -2  NaN NaN

This will produce this output:

c1  c2  c3  c4  c5  c6  c7  x1  y1  x2  y2  coordinates
0   x   x   x   x   x   x   x   001.00.0[(0, 0), (1.0, 0.0)]1   x   x   x   x   x   x   x   012.03.0[(0, 1), (2.0, 3.0)]2   x   x   x   x   x   x   x   -1  -2  NaN NaN [(-1, -2)]

This deals with the unequal number of coordinates in each row. Hope that helps!

Post a Comment for "How To Concatenate Pairs Of Row Elements Into A New Column In A Pandas Dataframe?"