Объединенный параметризованный набор векторизованных столбцов

#python #pandas

Вопрос:

Мне нужно создать функцию в панд, которая объединяет набор столбцов. В то время как большинство ответов, по-видимому, имеют жестко закодированные значения, я должен был бы каким-то образом параметризовать его в функции и векторизовать на уровне фреймов данных, избегая операций с сериями, лучше векторизовать, поскольку это большой df.

Я предполагаю, что я должен каким-то образом иметь для (также пытался уменьшить), чтобы получить результаты:

Пример ввода

 '|    | A   | D   |
 |---:|:----|:----|
 |  0 | B   | E   |
 |  1 | C   | F   |'
 

Ожидаемый результат

 '|    | A   | D   | concat   |
 |---:|:----|:----|:---------|
 |  0 | B   | E   | BE       |
 |  1 | C   | F   | CF       |'
 

псевдокод

 import pandas as pd
df_test = pd.DataFrame({'A':['B','C'],'D':['E','F']})

def concat_columns(df,columns_concat):
     string_c = pd.DataFrame({'Concat':[]})
     for col in columns_concat:
         string_c['Concat'] =df[col].astype(str)
     return string_c

df_test['concat'] = concat_columns(df_test,['A','D'])
 

Это возвращает объединение столбцов как NaN, не уверен, что это вообще возможно

Комментарии:

1. ОБЪЯВЛЕНИЕ берется из заголовков столбцов, а BE-из строки выше предыдущей строки?

2. @ScottBoston исправлено извините, значения-это столбцы,

3. df['concat'] = df.sum(axis=1) ?

4. @ScottBoston: модифицируя мой пример, типы данных могут быть целыми числами, датами….

5. df.astype(str).apply("".join, axis=1)

Ответ №1:

Попробуйте sum с axis=1 :

 df = pd.DataFrame({'A':[*'BC'],
                   'D':[*'EF'],
                   'E':[pd.Timestamp('now'), pd.Timestamp('now') pd.Timedelta(days=1)]})

df['concat'] = df.astype(str).sum(axis=1)
print(df)
 

Выход:

    A  D                          E                        concat
0  B  E 2021-09-07 08:31:08.684189  BE2021-09-07 08:31:08.684189
1  C  F 2021-09-08 08:31:08.684189  CF2021-09-08 08:31:08.684189
 

Комментарии:

1. Это был в значительной степени мой ответ, единственное, что я должен был сделать сам, — это параметризовать набор столбцов внутри функции.

2. @AlejandroA Спасибо! Счастливого кодирования. Будьте в безопасности и оставайтесь здоровыми.