#pandas #dataframe #lambda #transpose
#pandas #фрейм данных #лямбда #транспонировать
Вопрос:
Третий случай за два дня!
У меня есть следующий фрагмент фрейма данных (где столбцы изначально были многоиндексированы, но после сохранения df в CSV и чтения его обратно я потерял индексацию, и второй уровень на самом деле является строкой):
отредактировано:
model model_a model_a model_b model_b
NaN b pvalue b pvalue
predictor NaN NaN NaN NaN
aches 0.6991801946 0.33372434223 0.3523114106 0.0359096002
cough 0.7164202952 0.00796337569 0.7405228672 0.0473180859
Мой вариант использования — теперь перенести предикторы ache
и cough
столбцы as и верхний уровень индексированных столбцов в виде строк, так что, если значение pvalue
<= 0.05, ячейка должна быть нулевой, в противном случае значение b
должно быть в этой ячейке. Я предполагаю, что оценка pvalue
будет в лямбда-функции, но я могу ошибаться!
Таким образом, желаемый фрейм данных будет:
model aches cough
model_a NaN 0.7164202952
model_b 0.3523114106 0.7405228672
Честно говоря, я понятия не имею, как это сделать, не говоря уже о том, с чего начать. Любая помощь будет очень признательна.
Ответ №1:
Попробуйте с pd.IndexSlice
помощью where
out = df.loc[:,pd.IndexSlice[:,'b']].where(df.loc[:,pd.IndexSlice[:,'pvalue']].values<0.05).T.reset_index(level=1,drop=True)
aches cough
ma NaN 0.716420
mb 0.352311 0.740523
Комментарии:
1. Я получаю сообщение об ошибке
TypeError: unhashable type: 'slice'
… возможная проблема с пустыми ячейками во второй и третьей строках? См. Редактирование выше.2. Возможно ли, что, поскольку форма моего фрейма данных такова, что
Out[216]: (26, 27)
это будет проблемой (мой фрагмент был 5×5)?3. Похоже, что когда я сохранил это в CSV и прочитал его снова, я потерял mullti-index. Я соответствующим образом обновляю вопрос mu на основе этого.
4. Сделал это, и теперь просто сражаюсь с str, который должен быть с плавающей точкой:
test = df.T.set_index(0, append=1).T
5. это работает, за исключением того, что имена предикторов не транспонируются соответствующим образом.