Объединение двух столбцов для пользовательской передачи

#python #pandas #dataframe #apply

#python #pandas #фрейм данных #применить

Вопрос:

У меня есть фрейм данных, подобный этому, где мой столбец «объединить» выглядит следующим образом [(-34, -58), (-3, -5)]. Но я хочу, чтобы это преобразовывалось в [‘-34,-58,-3,-5’]. Как мне этого добиться?

 df = pd.DataFrame(
    {
     'X_1': [-34, -1, -33, 4, 10],
     'Y_1': [-58, -4, -70, -74, -66],
     'X_2': [-3, -1, -3, 4.0, 1],
     'Y_2': [-5, -4, -7, -7.8, -6]})

df['Coordinates_Top_right'] = list(zip(df.X_1, df.Y_1))
df['Coordinates_top_left'] = list(zip(df.X_2, df.Y_2))
df['combine'] = df[['Coordinates_Top_right','Coordinates_top_left']].apply(list,axis=1)

#Tried this but doesnt give me the desired output:

df['area'] = df[['Coordinates_Top_right','Coordinates_top_left']].apply(list,axis=1)
  

Комментарии:

1. Я обновил свой ответ, чтобы соответствовать требованиям, это преобразует его в список с одним элементом, который является строкой (значения, разделенные запятыми).

Ответ №1:

Используйте:

 import itertools
df['combine'] = df[['Coordinates_Top_right','Coordinates_top_left']].
                       apply(lambda x: list(itertools.chain(*x)),axis=1)
print(df)

   X_1  Y_1  X_2  Y_2 Coordinates_Top_right Coordinates_top_left  
0  -34  -58 -3.0 -5.0            (-34, -58)         (-3.0, -5.0)   
1   -1   -4 -1.0 -4.0              (-1, -4)         (-1.0, -4.0)   
2  -33  -70 -3.0 -7.0            (-33, -70)         (-3.0, -7.0)   
3    4  -74  4.0 -7.8              (4, -74)          (4.0, -7.8)   
4   10  -66  1.0 -6.0             (10, -66)          (1.0, -6.0)   

                  combine  
0  [-34, -58, -3.0, -5.0]  
1    [-1, -4, -1.0, -4.0]  
2  [-33, -70, -3.0, -7.0]  
3     [4, -74, 4.0, -7.8]  
4    [10, -66, 1.0, -6.0]  
  

Комментарии:

1. Спасибо! Как мне вставить это в кавычки? Вот так…[‘-34,-58,-3,-5’]

2. @KaushikN почему вы хотите сохранить их в виде строки? это странное требование

3. Я передаю этот столбец другой функции, которая принимает только строки

4. @KaushikN но, применяя [] как список, как это строка?

5. Это полезно.. будет обновлено, если я найду решение. Спасибо

Ответ №2:

Вместо использования встроенного метода используйте свою собственную анонимную функцию

 import pandas as pd

df = pd.DataFrame(
    {
     'X_1': [-34, -1, -33, 4, 10],
     'Y_1': [-58, -4, -70, -74, -66],
     'X_2': [-3, -1, -3, 4.0, 1],
     'Y_2': [-5, -4, -7, -7.8, -6]})

df['Coordinates_Top_right'] = list(zip(df.X_1, df.Y_1))
df['Coordinates_top_left'] = list(zip(df.X_2, df.Y_2))
df['combine'] = df[['Coordinates_Top_right','Coordinates_top_left']].apply(lambda x: [','.join(map(str, (x[i][j] for i in range(2) for j in range(2))))],axis=1)