#python-3.x
#python-3.x
Вопрос:
Мне в основном нужно найти соответствующее значение строки из первого столбца, т. Е. (тип) для максимальных значений каждого столбца в приведенном ниже фрейме данных.
Давайте предположим, что это фрейм данных df3, показанный ниже.
Мне нужно найти соответствующие значения строк типа для всех максимальных значений числовых столбцов.
например: max (price) => 8,85,113 => corr_logx (это выходные данные, которые мне нужно найти для всех числовых переменных)
type price Bedroom_3 Bedroom_4
corr_x 3,56,315 5,01,687 6,05,458
corr_logx 8,85,113 2,27,955 1,28,834
corr_expx 8,34,503 3,62,952 2,30,759
corr_sqrtx 6,29,162 3,36,964 8,96,593
corr_sqrex 7,79,030 8,54,539 6,07,960
Output I need:
Variable transfrm_used
Price corr_logx
Bedroom_3 corr_sqrex
Bedroom_4 corr_sqrtx
Для этого:
Я создал список числовых имен столбцов и использовал его в качестве диапазона в for-loop. Это помогает мне переходить к каждому столбцу.
Затем внутри каждого столбца я создал еще один цикл for, который будет проходить в каждой строке, чтобы соответствовать максимальному значению столбца.
Если значение совпадает, то это должно привести к соответствующему значению из первого столбца / столбца 0 / типа имени столбца. В противном случае он должен продолжить поиск соответствия.
cols_list = df3.columns.difference(['type'])
transfrm_used = []
variable = []
for col_name in cols_list:
variable.append(col_name) # this gives the respective column name
print(variable)
for rows in range(0,5):
if df3[rows,col_name] == np.max(df3.col_name): # works as Match
transfrm_used.append(df3[rows,0])
else:
continue
print('done')
Я ищу формат результата, в котором я могу получить оба названия столбцов, таких как price, Bedroom_3 и т.д., И его соответствующее значение из столбца типа, такого как corr_logx.
В Excel это делается с помощью MATCHINDEX и поисковых запросов. Вот полный набор фреймов данных и ожидаемый результат
type price Bedroom_3 Bedroom_4
corr_x 3,56,315 5,01,687 6,05,458
corr_logx 8,85,113 2,27,955 1,28,834
corr_expx 8,34,503 3,62,952 2,30,759
corr_sqrtx 6,29,162 3,36,964 8,96,593
corr_sqrex 7,79,030 8,54,539 6,07,960
max_price max_Bedroom_3 max_Bedroom_4
max_value: 8,85,113 8,54,539 8,96,593
relevant_type: corr_logx corr_sqrex corr_sqrtx
Ответ №1:
Если вы уверены, что существует только один экземпляр каждой максимальной цены, чтобы найти максимальное значение столбца, подойдет .max() . Затем мы можем найти тип этой строки:
max_value = {}
relevant_type = {}
for col_name in cols_list:
max_val = df[col_name].max()
max_value[col_name] = max_val
relevant_type[col_name] = df.loc[df[col_name] == max_val,'type']
Затем мы можем добавить эти два dicts в виде строк в нижней части фрейма данных:
df3.append(max_value, ignore_index=True)
df3.append(relevant_type, ignore_index=True)
Или мы можем создать новый фрейм данных:
combined_dict = {x: [max_value[x],relevant_type[x]] for x in max_value}
df = pd.DataFrame(combined_dict, index=['max value','relevant type'])
Комментарии:
1. Спасибо за решение и предоставление различных вариантов для него @Jim Eisenberg. Это работает отлично.
2. Рад помочь — если это соответствует тому, что вам нужно, пожалуйста, примите ответ 🙂
3. Я уже принял (нажал на верхнюю стрелку), но там не отображается никаких изменений в количестве. Дайте мне знать, если есть какой-либо другой способ сделать это. Я здесь новичок 🙂
4. Я тоже совсем новичок — но добро пожаловать в Stack Overflow 🙂 Стрелки вверх и вниз предназначены для увеличения и уменьшения голосов — я думаю, вам нужно определенное количество «баллов», чтобы сделать это. Под стрелками должен быть какой-то символ в виде звезды — нажатие на который принимает ответ. (Кстати, принятие ответов дает вам больше баллов, так что вы сможете повысить рейтинг).
5. Да, там была отметка, на которую я только что нажал, спасибо, что дали мне знать :))