#python #pandas
Вопрос:
У меня есть фрейм данных pandas с несколькими столбцами, значения которых увеличиваются с некоторого значения от 0 до 1 для столбца A
до столбца E
, который всегда равен 1 (представляет совокупные вероятности).
ID A B C D E SIM
1: 0.49 0.64 0.86 0.97 1.00 0.98
2: 0.76 0.84 0.98 0.99 1.00 0.87
3: 0.32 0.56 0.72 0.92 1.00 0.12
Столбец SIM
представляет собой столбец со случайными однородными числами.
Я хочу добавить новый столбец SIM_CAT
со значениями, равными имени столбца, значение которого является правой границей интервала, в который попадает значение в столбце SIM
:
ID A B C D E SIM SIM_CAT
1: 0.49 0.64 0.86 0.97 1.00 0.98 E
2: 0.76 0.84 0.98 0.99 1.00 0.87 C
3: 0.32 0.56 0.72 0.92 1.00 0.12 A
У меня есть краткий способ сделать это?
Ответ №1:
Вы можете сравнить столбцы SIM
и использовать idxmax
их, чтобы найти 1-е большее значение:
cols = list('ABCDE')
df['SIM_CAT'] = df[cols].ge(df.SIM, axis=0).idxmax(axis=1)
df
ID A B C D E SIM SIM_CAT
0 1: 0.49 0.64 0.86 0.97 1.0 0.98 E
1 2: 0.76 0.84 0.98 0.99 1.0 0.87 C
2 3: 0.32 0.56 0.72 0.92 1.0 0.12 A
Если SIM
может содержать значения, превышающие 1:
cols = list('ABCDE')
df['SIM_CAT'] = None
df.loc[df.SIM <= 1, 'SIM_CAT'] = df[cols].ge(df.SIM, axis=0).idxmax(axis=1)
df
ID A B C D E SIM SIM_CAT
0 1: 0.49 0.64 0.86 0.97 1.0 0.98 E
1 2: 0.76 0.84 0.98 0.99 1.0 0.87 C
2 3: 0.32 0.56 0.72 0.92 1.0 0.12 A
Комментарии:
1. Если вы замените первую SIM-карту (0,98) на 1,98,
idxmax
A
вместоNaN
2. @Corralien Да, я предполагаю
SIM
, что между 0 и 1, так как это вероятность. Но, вероятно, лучше явно отметить это.