Python Pandas создает столбец при условии динамического количества столбцов - PullRequest
0 голосов
/ 24 октября 2018

Если я создаю новый фрейм данных на основе пользовательского параметра, скажем a = 2.Поэтому мой фрейм данных df сжимается до 4 (ax2) столбцов в df_new.Например:

df_new = pd.DataFrame(data = {'col_01_01': [float('nan'),float('nan'),1,2,float('nan')], 'col_02_01': [float('nan'),float('nan'),1,2,float('nan')],'col_01_02': [0,0,0,0,1],'col_02_02': [1,0,0,1,1],'output':[1,0,1,1,1]})

Чтобы быть более точным в столбце output, давайте посмотрим на первый ряд.[(nan,nan,0,1)] -> применить функцию notna () - для первых двух записей и сравнение '== 1' для третьей и четвертой строки.-> Это дает [(false, false, false, true)] -> сравнить их с выражением OR и получить желаемый результат True -> 1 Во второй строке мы находим [(nan,nan,0,0)], поэтому мы находим вывод равным 0, поскольку впервые два столбца и 0 в двух последних.

Для параметра a=3 мы находим 6 столбцов.

Результат выглядит примерно так:

   col_01_01  col_02_01  col_01_02  col_02_02  output
0        NaN        NaN          0          1       1
1        NaN        NaN          0          0       0
2        1.0        1.0          0          0       1
3        2.0        2.0          0          1       1
4        NaN        NaN          1          1       1

1 Ответ

0 голосов
/ 24 октября 2018

Вы можете использовать векторизованные операции с notnull и eq:

null_cols = ['col_01_01', 'col_02_01']
int_cols = ['col_01_02', 'col_02_02']

df['output'] = (df[null_cols].notnull().any(1) | df[int_cols].eq(1).any(1)).astype(int)

print(df)

   col_01_01  col_02_01  col_01_02  col_02_02  output
0        NaN        NaN          0          1       1
1        NaN        NaN          0          0       0
2        1.0        1.0          0          0       1
3        2.0        2.0          0          1       1
4        NaN        NaN          1          1       1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...