#python #dataframe
#python #dataframe
Вопрос:
Я обращаюсь за помощью при создании фрейма данных.
Код показан следующим образом:
import pandas as pd
import numpy as np
data = np.array([[1,2,3],[4,5,6],[2,6,3],[np.nan,np.nan,np.nan]])
index = {'M','B','C','D'}
columns = {'x','y','z'}
df_test = pd.DataFrame(data,index=index,columns=columns)
print('df_test is n', df_test)
И результат
z x y
B 1.0 2.0 3.0
C 4.0 5.0 6.0
M 2.0 6.0 3.0
D NaN NaN NaN
Но я хочу поддерживать порядок в индексе и данных, то есть я хочу получить результат в виде:
(Пожалуйста, обратите внимание на порядок в индексе)
z x y
M 1.0 2.0 3.0
B 4.0 5.0 6.0
C 2.0 6.0 3.0
D NaN NaN NaN
Кто-нибудь, кто может мне помочь?
Спасибо.
Комментарии:
1. Ваш код правильный. Проверьте это еще раз.
Ответ №1:
Чтобы сохранить порядок, для которого вы должны использовать списки index
(вместо наборов):
index = ['M','B','C','D']
Если порядок столбцов также имеет значение:
columns = ['x','y','z']
Комментарии:
1. Спасибо за ваше руководство, это важно.
Ответ №2:
Используйте sort_index, как показано ниже:
df_test.sort_index(level=['M','B','C','D'])
Вы также можете использовать непосредственно имя списка вместо всего списка, что полезно, когда в нем много строк, как показано ниже:
df_test.sort_index(level=your_index)
где в этом случае
your_index = ['M','B','C','D']
(избегайте именования your_index как «index», как вы делали в своем вопросе, потому что это имя уже используется в Python)
Комментарии:
1. Да, это работает так, как ожидалось. Однако, когда существует много строк, использование списка может быть лучше, как показано @rftr
2. Что вы имеете в виду? Мое решение также использует list. Вы также можете использовать непосредственно имя списка вместо всего списка, что полезно, когда в нем много строк, как показано ниже:
df_test.sort_index(level=your_index)
3. О, я понял. Я неправильно понял ваше предложение раньше, это еще одно правильное решение. Большое спасибо
4. Отлично, не забудьте принять некоторые ответы, учитывая, что ваша проблема была решена, чтобы вопрос ушел из очереди без ответа. Приветствия