Я новичок в Python и пытаюсь сравнить несколько столбцов в фрейме данных pandas. Столбцы представляют месяцы, и я пытаюсь просмотреть период x месяцев и отметить, имела ли строка i и т. д. значение 2 или более.
Ниже приведен код, который я использовал для создания моего примера df:
arr_random = np.random.randint(low=0, high=5, size=(100,26))
arr_random
col_names = []
i = 0
while i <= 25:
col_names.append('mth_'+str(i))
i = i + 1
rand_df = pd.DataFrame(arr_random, index = None, columns = col_names)
Я хочу, чтобы мои флаги были такими: 1 = 2+, 0 = <2, -1 = отсутствующие данные (обычно я устанавливаю значения NaN равными -1). Ниже приведен код, который я использую для этого:
review_months = [12, 18, 24]
for x in review_months: #check this
rand_df['TWOPLUS_'+str(x)+'M'] = -1
for i in range(x):
rand_df['TWOPLUS_'+str(x)+'M'] = rand_df[['TWOPLUS_'+str(x)+'M', 'mth_'+str(i+1)]].max(axis = 1)
conditions = [ rand_df['TWOPLUS_'+str(x)+'M'] >= 2, rand_df['TWOPLUS_'+str(x)+'M'] < 2, rand_df['mth_'+str(i)] == -1 ]
choices = [ 1 , 0, -1 ]
rand_df['TWOPLUS_'+str(x)+'M'] = np.select(conditions, choices, default=np.nan)
Единственная проблема заключается в том, что я не получаю статус, если в строке КОГДА-ЛИБО было 2 или более в одном из столбцов за заданный период времени, он возвращается только в том случае, если в данный момент у них есть 2 или более для указанного столбца.






Вы можете использовать следующий код, чтобы проверить, имел ли фрейм данных когда-либо значение 2 или больше.
for month in (12, 18, 24):
rand_df[f'TWOPLUS_{month}M'] = (rand_df.loc[:, rand_df.columns[:month+1]] >= 2).any(axis=1).astype(int)
rand_df[f'TWOPLUS_{month}M'].fillna(-1, inplace=True)
rand_df
Он выбирает столбцы до желаемого месяца и проверяет, равно ли каждое значение во фрейме данных хотя бы 2. Затем он использует any(axis=1), чтобы проверить, является ли какое-либо значение истинным в каждой строке. Наконец, он преобразует его в 1, если какое-либо значение в строке равно True, иначе 0.
NaN заменяются на -1.
Вот ссылка на документацию для любого метода https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.any.html и для использования pandas .loc https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.loc.html
Выход