使用 MULTIINDEX 对数据框进行排序
sort dataframe using MULTIINDEX
我是新手,非常需要帮助来使用多索引更改我的数据框,
我的数据框的样子,请注意从 csv 文件中读取它。
我希望它看起来如何,
请有人帮助我,我已经用了很长时间了。我已经尝试了堆栈功能,但它根本无法正常工作。请帮助我..
我设法做到的是:
import pandas as pd
路径="C:\Desktop\data.csv"
df=pd.read_csv(路径, sep=';')
提前致谢!
您要查找的函数称为 .stack()。
此处的文档:https://pandas.pydata.org/pandas-docs/stable/reshaping.html#reshaping-by-stacking-and-unstacking
一个例子:
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
对您的原创评论post
以后,您可以在这里轻松地与以下人分享您的数据框:
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_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 文件中读取它。
我希望它看起来如何,
请有人帮助我,我已经用了很长时间了。我已经尝试了堆栈功能,但它根本无法正常工作。请帮助我..
我设法做到的是:
import pandas as pd
路径="C:\Desktop\data.csv" df=pd.read_csv(路径, sep=';')
提前致谢!
您要查找的函数称为 .stack()。 此处的文档:https://pandas.pydata.org/pandas-docs/stable/reshaping.html#reshaping-by-stacking-and-unstacking
一个例子:
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
对您的原创评论post
以后,您可以在这里轻松地与以下人分享您的数据框:
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_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