Как добавить мультииндекс в мой массив данных в python? - PullRequest
1 голос
/ 27 февраля 2020

Я хотел бы добавить мультииндекс в мой фрейм данных. Я посмотрел в pandas .pydata [documentation][1] без какой-либо удачи.

Мой фрейм данных выглядит так, где Имя является индексом, а дата включает скорость для судов:

                     27/02/2020
Name                      
MAERSK EDMONTON       19.1
MAERSK EMDEN           0.0
MAERSK ENPING          0.0
MAERSK ESSEN           0.0
MAGLEBY MAERSK         0.1
METTE MAERSK          17.7
MSC AMBITION           0.0
MSC ARIANE            17.4
MSC CAMILLE            0.0

Желаемый результат будет выглядеть следующим образом. Суда принадлежат данному альянсу, в данном случае 2M Alliance.

2M_Alliance
                     27/02/2020
Name                      
MAERSK EDMONTON       19.1
MAERSK EMDEN           0.0
MAERSK ENPING          0.0
MAERSK ESSEN           0.0
MAGLEBY MAERSK         0.1
METTE MAERSK          17.7
MSC AMBITION           0.0
MSC ARIANE            17.4
MSC CAMILLE            0.0

Вот что я получил до сих пор.

df_alli = df[df.Name.isin(["MAERSK EMDEN", "METTE MAERSK", "MAGLEBY MAERSK", "MSC ARIANE", "MAERSK EDMONTON", "MAERSK ENPING", "MSC AMBITION", "MSC CAMILLE", "MAERSK ESSEN"])]
df_name = pd.DataFrame()

df_name["Name"] = df_alli["Name"]
df_name[date] = df_alli[date]

#df_name = df_name.set_index("Name")

arrys = [["2M_Alliance"], df_name["Name"]]
s = pd.MultiIndex.from_product(arrys, names=["Alliance", "Name"])
s = pd.Series(df_name[date], index=s)
s = pd.DataFrame(s)
print(s)

Вывод выглядит нормально, но NaN не заполнены, и я не уверен, почему. Выходы:

                            27/02/2020
Alliance    Name                      
2M_Alliance MAERSK EDMONTON        NaN
            MAERSK EMDEN           NaN
            MAERSK ENPING          NaN
            MAERSK ESSEN           NaN
            MAGLEBY MAERSK         NaN
            METTE MAERSK           NaN
            MSC AMBITION           NaN
            MSC ARIANE             NaN
            MSC CAMILLE            NaN

1 Ответ

1 голос
/ 27 февраля 2020

Создайте новый столбец с помощью DataFrame.assign и затем используйте DataFrame.set_index:

df_name = df_alli.assign(Alliance = '2M_Alliance').set_index(['Alliance','Name'])
print (df_name)
                             27/02/2020
Alliance    Name                       
2M_Alliance MAERSK EDMONTON        19.1
            MAERSK EMDEN            0.0
            MAERSK ENPING           0.0
            MAERSK ESSEN            0.0
            MAGLEBY MAERSK          0.1
            METTE MAERSK           17.7
            MSC AMBITION            0.0
            MSC ARIANE             17.4
            MSC CAMILLE             0.0
...