Проблема здесь в том, что каждый из столбцов bool, то есть df_merged['JUN_bool']
, является последовательным, поэтому оператор сравнения is
никогда не вернет просто True
, поэтому evertyhing назначается как nan.
Если месяцы значения выровнены по столбцам, вы можете использовать заглавные буквы и использовать метод стека, только если индексы уникальны это пример трех месяцев:
np.random.seed(10)
months = np.random.choice(['Aug', 'Jun', 'Jul'], 100)
JUN = np.random.random(100)
JUL = np.random.random(100)
AUG = np.random.random(100)
index = [i for i in range(1900, 2000)]
data = pd.DataFrame(dict(months=months, JUN=JUN, JUL=JUL, AUG=AUG), index=index)
Выполните изменение столбца месяцев и логические маски:
data['months'] = data.months.str.upper()
df2 = data[['JUN', 'JUL', 'AUG']].stack(
).reset_index(level=1)
df2.rename(columns={0: 'month_value'}, inplace=True)
df2['months'] = data['months']
SOI = df2[df2['months'] == df2['level_1']].month_value
data['SOI'] = SOI
data.head(4)
# months JUN JUL AUG SOI
# 1900 JUN 0.637952 0.933852 0.384843 0.637952
# 1901 JUN 0.372520 0.558900 0.820415 0.372520
# 1902 AUG 0.002407 0.672449 0.895022 0.895022