Pandas apply (): как умножить выбранные столбцы на основе совпадения строк и вернуть полный фрейм данных - PullRequest
1 голос
/ 08 мая 2019

У меня есть столбцы, такие как имена, FDR%, возраст, FCR%, доход. Я хочу выбрать столбцы с совпадением строк '%' и умножить на 100. Наконец, я хотел бы вернуть весь фрейм данных с%изменения значений столбца.Я попытался, как показано ниже:

df_final=df_1.filter(like='%', axis=1).apply(lambda x:x*100)
df_final

Это просто возвращает подмножество, то есть столбцы, работающие с FDR% и FCR%. Мне нужен весь фрейм данных, возвращенный с соответствующими изменениями.

Также естьлучший метод достижения того же?

1 Ответ

2 голосов
/ 08 мая 2019

Вы можете выбрать столбцы из DataFrame, возвращаемые filter и кратные 100:

df_1 = pd.DataFrame({
        'A':list('abcdef'),
         'FDR%':[4,5,4,5,5,4],
         'C':[7,8,9,4,2,3],
         'FCR%':[1,3,5,7,1,0],
         'E':[5,3,6,9,2,4],
})

cols = df_1.filter(like='%').columns
df_1[cols] *= 100
print (df_1)
   A  FDR%  C  FCR%  E
0  a   400  7   100  5
1  b   500  8   300  3
2  c   400  9   500  6
3  d   500  4   700  9
4  e   500  2   100  2
5  f   400  3     0  4

Или используйте маску с помощью Series.str.contains или Series.str.endswith и выберите столбцы с помощью DataFrame.loc:

mask = df_1.columns.str.contains('%')
#alternative
#mask = df_1.columns.str.endswith('%')
df_1.loc[:, mask] *= 100

Примечание

apply здесь для нескольких это плохой выбор, потому что петли под капотом, так медленно. Быстрое решение кратно только скаляру.

...