Python 使用多索引对数据帧排序

Python 使用多索引对数据帧排序,python,pandas,stack,multi-index,Python,Pandas,Stack,Multi Index,我是一个新手,非常需要使用多索引更改我的数据帧 请注意,我的数据帧是如何从csv文件中读取的 我希望它看起来怎么样 请有人帮帮我,我已经跟这个很久了。我尝试过堆栈函数,但它一点也不好用。请帮帮我 我所做的是: import pandas as pd path=“C:\Desktop\data.csv” df=pd.read_csv(路径,sep=';') 提前谢谢你 您要查找的函数名为.stack()。 此处的文档: 例如: import pandas as pd dict_ = {

我是一个新手,非常需要使用多索引更改我的数据帧

请注意,我的数据帧是如何从csv文件中读取的

我希望它看起来怎么样

请有人帮帮我,我已经跟这个很久了。我尝试过堆栈函数,但它一点也不好用。请帮帮我

我所做的是:

import pandas as pd 
path=“C:\Desktop\data.csv” df=pd.read_csv(路径,sep=';')


提前谢谢你

您要查找的函数名为.stack()。 此处的文档:

例如:

import pandas as pd

dict_ = {
    "date": [2017,2016,2015,2014],
    "total members": [150,140,100,150],
    "lions": [20,10,5,50]
}

df = pd.DataFrame.from_dict(dict_)
table = df.set_index("date").stack() # sets date as index
table.to_frame(name='Amount').to_excel('output.xlsx') # names the column: Amount and outputs to an xlsx file
印刷品:

date               
2017  lions             20
      total members    150
2016  lions             10
      total members    140
2015  lions              5
      total members    100
2014  lions             50
      total members    150
dtype: int64

对原始帖子的评论

将来,您可以在此轻松地与以下人员共享数据帧:

df.head().to_dict() # .head() return first 5 rows
此示例输出:

{'date': {0: 2017, 1: 2016, 2: 2015, 3: 2014},
 'lions': {0: 20, 1: 10, 2: 5, 3: 50},
 'total members': {0: 150, 1: 140, 2: 100, 3: 150}}

让我们使用
melt
set\u index

import pandas as pd
from io import StringIO

csv_file = StringIO("""date,2017,2016,2015,2014
total members, 150, 140, 100, 150
lions, 20, 10, 5, 25
demokrats, 60, 50, 15, 25
liberals, 20, 5, 40, 25
partizans, 50, 75, 40, 25""")

df = pd.read_csv(csv_file)

df_out= (df.rename(columns={'date':'Parties'})
           .melt(id_vars='Parties',var_name='Date',value_name='Amount')
           .set_index(['Date','Parties']))

print(df_out)
输出:

                    Amount
Date Parties              
2017 total members     150
     lions              20
     demokrats          60
     liberals           20
     partizans          50
2016 total members     140
     lions              10
     demokrats          50
     liberals            5
     partizans          75
2015 total members     100
     lions               5
     demokrats          15
     liberals           40
     partizans          40
2014 total members     150
     lions              25
     demokrats          25
     liberals           25
     partizans          25

请发布您的数据帧片段或至少生成它的代码。真的非常感谢您安东!我试过你的代码,它工作了!但是,当我尝试这样做时,没有先创建表-我从csv文件读取数据并获取日期框,它找不到名称(“日期”),这非常奇怪,非常感谢Scott Boston@如果它能帮你的话,你会考虑这个答案吗?谢谢