Создайте функцию для извлечения определенных столбцов и переименования панд - PullRequest
0 голосов
/ 04 мая 2018

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

Я хочу использовать функцию (я знаю, что могу сделать это без функции, но в конечном итоге это поможет мне использовать функцию)

У меня есть следующая исходная таблица

id col1 col2 col3 col4 
1   a    b    c    g
1   a    b    d    h
1   c    d    e    i

Я хочу эту окончательную структуру

id num  group  
1   a    b    
1   a    b    
1   c    d  

Итак, все, что я делаю, это возвращаю id, col1 и col2 из исходной таблицы (но учтите, что имя столбца изменяется. Для разных исходных таблиц это будет другой набор из 3 столбцов, который я буду извлекать, поэтому я использую функция).

Используемая мною функция в настоящее время возвращает только 1 столбец (вместо 3)

Определение функции:

def func(x, col1='id', col2='num', col3='group'):
    d=[{'id':x[col1], 'num':x[col2], 'group':x[col3]}]
    return pd.DataFrame(d)

Применение функции к исходной таблице.

target= source.apply(func, axis=1)

Ответы [ 2 ]

0 голосов
/ 04 мая 2018

Вы также можете сделать:

def func(df, *l):
    d = pd.DataFrame(df, columns=l)
    d.rename(columns={'col1':'num', 'col2':'group'}, inplace=True)
    return d

df2 = func(df, 'id','col1','col2')

print(df2)

   id num group
0   1   a     b
1   1   a     b
2   1   c     d
0 голосов
/ 04 мая 2018

Вот гибкий способ написать эту функцию:

def func(dframe, **kwargs):
    return dframe.filter(items=kwargs.keys()).rename(columns=kwargs)

func(df, id="id", col1="num", col2="group")

#   group  id num
# 0     b   1   a
# 1     b   1   a
# 2     d   1   c

Чтобы гарантировать, что ваш новый фрейм данных сохраняет порядок столбцов оригинала, вы можете сначала отсортировать ключи аргумента:

def func(dframe, **kwargs):
    keys = sorted(kwargs.keys(), key=lambda x: list(dframe).index(x))
    return dframe.filter(items=keys).rename(columns=kwargs)

func(df, id="id", col1="num", col2="group")

#    id num group
# 0   1   a     b
# 1   1   a     b
# 2   1   c     d
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...