Я создал пример того, как я обычно выполняю одни и те же задачи:
df = pd.DataFrame({'a': [1,1,1], 'b': [1,2,3], 'c': [0,-1,-2]})
print(df)
Out:
a b c
0 1 1 0
1 1 2 -1
2 1 3 -2
Это примерный фрейм данных.Вы можете применить некоторую функцию для изменения всех ее столбцов в зависимости от имени столбца, доступного атрибута throgh name
.Например, столбец 'a'
имеет только имя a
:
df['a'].name
Out:
'a'
def mapper(name):
return name + '_new'
df_new = df.apply(lambda col: col * 4 if col.name == 'a' or col.name == 'b'
else col * 7 if col.name == 'CZK_fwdp'
else col * 5, axis=0).rename(mapper=mapper, axis=1)
print(df_new)
Out:
a_new b_new c_new
0 4 4 0
1 4 8 -5
2 4 12 -10
Используйте метод apply
, чтобы применить вашу лямбда-функцию вдоль столбцов с аргументом axis = 1.Функция mapper
используется, чтобы избежать вмешательства имен столбцов.Чтобы получить нужный фрейм данных, вы можете просто объединить старый и новый фреймы данных:
df_conc = pd.concat((df, df_new), axis=1)
print(df_conc)
Out:
a b c a_new b_new c_new
0 1 1 0 4 4 0
1 1 2 -1 4 8 -5
2 1 3 -2 4 12 -10
Если вам не нравятся лямбда-функции, вы можете использовать общую функцию:
def modify_column(col):
if col.name == 'a' or col.name == 'b':
return col * 4
elif col.name == 'CZK_fwdp':
return col * 7
else:
return col * 5
df_new = df.apply(modify_column, axis=0).rename(mapper=mapper, axis=1)