У меня есть следующий образец DataFrame
import numpy as np
import pandas as pd
df = pd.DataFrame({'Tom': [2, np.nan, np.nan],
'Ron': [np.nan, 5, np.nan],
'Jim': [np.nan, np.nan, 6],
'Mat': [7, np.nan, np.nan],},
index=['Min', 'Max', 'Avg'])
, который выглядит так, где каждая строка имеет только одно ненулевое значение
Tom Ron Jim Mat
Min 2.0 NaN NaN 7.0
Max NaN 5.0 NaN NaN
Avg NaN NaN 6.0 NaN
Желаемый результат
Для каждого столбца я хочу иметь ненулевое значение, а затем добавить индекс соответствующего ненулевого значения к имени столбца . Таким образом, окончательный результат должен выглядеть следующим образом:
Tom_Min Ron_Max Jim_Avg Mat_Min
0 2.0 5.0 6.0 7.0
Моя попытка
Использование списков: найдите ненулевое значение и добавьте соответствующий индекс к имени столбца, а затем создайте новый DataFrame
values = [df[col][~pd.isna(df[col])].values[0] for col in df.columns]
# [2.0, 5.0, 6.0, 7.0]
new_cols = [col + '_{}'.format(df[col][~pd.isna(df[col])].index[0]) for col in df.columns]
# ['Tom_Min', 'Ron_Max', 'Jim_Avg', 'Mat_Min']
df_new = pd.DataFrame([values], columns=new_cols)
Мой вопрос
Есть ли какие-то встроенные функции в pandas, которые могут сделать это без использования для циклов и понимания списков?