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