首页 > 解决方案 > 如何在 python 中将多索引附加到我的数据框?

问题描述

我想在我的数据框中添加一个多索引。我查看了 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 联盟。

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

标签: pythonpandasdataframemulti-index

解决方案


创建新列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

推荐阅读