Я обрабатываю около 20 кадров данных, каждый с разными именами столбцов, и в каждом кадре данных, если есть числовое значение больше x, я хочу вычесть x.

Например, в df one

  Name             ID           DOB
Joe Smith    10000000021021   01011901
Jane Smith   10000001074600   07025901

Но тогда в df two у меня может быть

Group            Office         OrderNum
20151        10000000060021     20051568
70386            90021          20051568

И эти имена столбцов разные в каждом df, но если числовое значение больше 10000000000000, вычтите это количество

0
Messak 15 Окт 2021 в 17:43

2 ответа

Лучший ответ

Вы можете использовать applymap:

THRESH = 10000000000000
df.applymap(lambda x: x-THRESH if isinstance(x, (int, float)) and x>THRESH else x)

Пример вывода:

       Name       ID      DOB
Joe   Smith    21021  1011901
Jane  Smith  1074600  7025901
1
mozway 15 Окт 2021 в 14:51

Вы можете использовать select_dtypes и работать с этими столбцами:

num = 1e13
dfs = [df1, df2]

for i in dfs:
    cols = i.select_dtypes("int64").columns # or use 'number'
    i[cols] = i[cols].mask(i[cols]>num, i[cols]-num)
    print (i)

         Name       ID      DOB
0   Joe Smith    21021  1011901
1  Jane Smith  1074600  7025901

   Group  Office  OrderNum
0  20151   60021  20051568
1  70386   90021  20051568
1
Henry Yik 15 Окт 2021 в 14:55