2015-09-06 11 views
1

У меня есть некоторые функции, которые действуют в списке и возвращают список. Я хотел бы создать столбец в Dataframe Pandas таким образом, чтобы новый столбец был списком, возвращаемым одной из функций, действующих на какой-либо другой столбец данных.Pandas dataframe применяет функцию ко всей колонке

В питона-как псевдокод:

def function(parameter, list): 
    ... 
    return output_list 

df['New Column'] = function(parameter, df['Old Column']) 

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

Есть ли способ сделать это? Спасибо!

EDIT: См. Ответ Брайана Пендлтона для решения. Столбцы в фрейме данных представляют собой объекты серии панды. Просто нужно создать серию из нужного списка.

df['New_Column'] = pd.Series(data=function(parameter,list)) 
+0

Является ли объект, содержащийся в dataframe, списком? Или вы рассматриваете объект 'Series' как список? – Jared

+0

'.apply()' - метод для применения функции к 'Series' в строке за строкой. Помимо этого вы не получили много информации для работы. – Jared

+0

Действительно, .apply() не работает из-за вашей причины. Если я использую функцию, подобную этой «функции (параметр, df [« Старый столбец »]), я получаю список python. Но тогда у меня нет способа приравнять столбец dataframe к значениям такого списка. EDIT: Я мог бы сделать цикл, но это кажется неэффективным. – pa7x1

ответ

0

Если вы отправляете df["old column"] функции, то вы отправляете pandas.Series объект. Почему бы просто не работать с этой серией и возвращать новую серию той же формы. Затем вы можете просто использовать свое назначение в новом столбце, как есть.

+0

Это имеет смысл для меня. Я должен выяснить, как создать серию в качестве выхода функции. Отправляйтесь в Google и сообщайте об этом. – pa7x1

+0

Он работает! Это именно то, что мне нужно. Спасибо. – pa7x1

0

Я думаю, что вы хотите:

  • применить функцию, которая вернет список
  • сохранить результат в DataFrame
  • разделить список на другую колонку

Вот пример.

def my_funct(parameter): 
return (1,2,3) + parameter 

df = pd.DataFrame(np.random.randint(low=1, high=10, size=3), columns=['my_funct']) 
#df['New Column'] = function(parameter, df['Old Column']) 
df['my_funct'] = df['my_funct'].apply(lambda x: my_funct(x)) 

# After the function call the resulting lists are stored in one column 

     my_funct 
0  [5, 6, 7] 
1 [10, 11, 12] 
2  [6, 7, 8] 

# Here is how to split the list into several columns 

df = df['my_funct'].apply(pd.Series) 

    0 1 2 
0 5 6 7 
1 10 11 12 
2 6 7 8 
Смежные вопросы