我有一个看起来像这样的 df:
import pandas as pd
# Create df
df = pd.DataFrame({'Name': ['Alice', 'Bob', 'Carol', 'Alice', 'Carol', 'Alice', 'Carol', 'Matt'],
'Address': ['123 A St', '123 B St', '123 C St', '123 A St', '123 C St', '456 X St', '123 C St', '123 M St'],
'State': ['AZ', 'TX', 'CA', 'AZ', 'CA', 'AZ', 'CA', 'MA'],
'Car': ['GMC', 'Mazda', 'Tesla', 'Honda', 'Nissan', 'Subaru', 'Mazda', 'Buick'],
'Miles': [1111, 2222, 3333, 4444, 5555, 6666, 7777, 8888]})
# Display df
display(df)
目标
我希望输出是使用“名称”、“地址”和“状态”的多索引 df,如下所示:
姓名 | 地址 | 状态 | 汽车 | 英里 |
---|---|---|---|---|
爱丽丝 | 123 圣 | AZ | 通用汽车 | 1111 |
本田 | 4444 | |||
爱丽丝 | 456 X 圣 | AZ | 斯巴鲁 | 6666 |
鲍勃 | 123 B 街 | TX | 马自达 | 2222 |
卡罗尔 | 123 C 街 | CA | 特斯拉 | 3333 |
日产 | 5555 | |||
马自达 | 7777 | |||
马特 | 123 M 街 | 马 | 别克 | 8888 |
已尝试代码
我尝试了以下代码,但它没有将具有相同多索引值的所有数据行分组:
df = df.set_index(keys=['Name', 'Address', 'State'])
感谢您提供的任何帮助。
您需要对索引进行排序才能获得所需的结果,但是,您需要在
['Address', 'State', 'Name']
上建立索引,以免将两个 Alice
分组在一起,然后首先在 Name
上排序:
df.set_index(keys=['Address', 'State', 'Name']).sort_index(level=2)
输出:
Car Miles
Address State Name
123 A St AZ Alice GMC 1111
Alice Honda 4444
456 X St AZ Alice Subaru 6666
123 B St TX Bob Mazda 2222
123 C St CA Carol Tesla 3333
Carol Nissan 5555
Carol Mazda 7777
123 M St MA Matt Buick 8888