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

Если вы хотите создать новый столбец в кадре данных из других столбцов, вы можете написать его довольно лаконично в R. В Python, однако, я пока не нашел способа сделать это, потому что мне приходится указывать кадр данных каждый раз, когда я использую колонка, если я не ошибаюсь. У меня есть способ указать один раз, какой фрейм данных использовать, после чего вам нужно только указать столбцы? Я привел два примера ниже, чтобы проиллюстрировать мою точку зрения.

В Python:

my_dataframe=pd.DataFrame({'col1':[1.0,2.0,3.0],
                 'col2':[4.0,5.0,6.0],
                 'col3':[0.25,0.25,0.25],
                 'first_column':[0.5,0.5,0.5],
                 'second_column':[1.0,2.0,3.0],
                 'third_column':[4.0,5.0,6.0],
                 'fourth_column':[0.25,0.25,0.25]})

my_dataframe['new_column'] = my_dataframe['col1'] - (my_dataframe['third_column'] / my_dataframe['fourth_column']) * my_dataframe['second_column']

В R

my_dataframe <- data_frame(col1 = c(1,2,3),
                           col2 = c(4,5,6),
                           col3 = c(0.25, 0.25, 0.25),
                           first_column = c(0.5, 0.5, 0.5),
                           second_column = c(1, 2, 3),
                           third_column = c(4, 5, 6),
                           fourth_column = c(0.25, 0.25, 0.25))

my_dataframe <- my_dataframe %>% mutate(new_column = col1 - (third_column / fourth_column) * second_column)

Самое близкое, к чему я могу обратиться - это использование лямбды, как в примере ниже, которое довольно чисто, однако функция автозаполнения столбцов не работает. Поэтому у меня вопрос: есть ли еще один метод, о котором я не подумал, который является чистым и обеспечивает автозаполнение?

df = pd.DataFrame({'A': [1, 2, 3]})
df.assign(B=df.A, C=lambda x:x['A']+ x['B'])

1 Ответ

0 голосов
/ 04 сентября 2018

Попробуйте df.apply

df = pd.DataFrame({'A': [1, 2, 3]})

Then

df['B'] = df.apply(lambda x:x['A'], axis=1)
df['C'] = df.apply(lambda x:x['A']+x['B'] , axis=1)

выход

   A  B  C
0  1  1  2
1  2  2  4
2  3  3  6
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...