#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 Спасибо! Счастливого кодирования. Будьте в безопасности и оставайтесь здоровыми.