2015-07-15 3 views
-1

У меня есть функция, которую я применяю к строкам данных. Эта функция возвращает список переменной длины в зависимости от параметра.Как добавить переменное количество столбцов в Pandas?

На данный момент я использую следующий пример кода:

import pandas as pd 

df = pd.read_csv("data.csv") 

def add_columns(x, amount): 
    return range(amount) 

df["L1"], df["L2"], df["L3"] = zip(*df.apply(lambda x: add_columns(x, 3), axis=1)) 

Есть ли способ для автоматического добавления метки?

+0

Ваш исходный код не работает для меня. какую версию панд вы используете? Почему вы не используете 'df.apply (...)? T' вместо' zip (* ...) '? – shx2

ответ

0

Не уверен, что, если я правильно понимаю ваш вопрос в том, что вы хотите, чтобы заполнить столбцы с, но это должно работать:

import pandas as pd 
import numpy as np 

def add_columns(x, *args): 
    col_names = args[0] 
    return pd.Series({i: x for i in col_names}) 

def add_range(x, *args): 
    col_names = args[1] 
    return pd.Series({k: v for k,v in zip(args[1],range(args[0]))}) 

df = pd.DataFrame(np.random.uniform(size=(10,2)),columns=["A","B"]) 

labels = ["L1","L2","L3"] 

# This populates with values from "A" column 
df.merge(df["A"].apply(add_columns, args=([labels])),left_index=True, right_index=True) 

# This populates with values from range(number_passed) function 
df.merge(df["A"].apply(add_range, args=([3,labels])),left_index=True, right_index=True)