将单索引pandas df转换为多索引df,然后将具有相同索引的所有行分组在单独的行上[重复]

wf82jlnq  于 2023-09-29  发布在  其他
关注(0)|答案(1)|浏览(103)

此问题已在此处有答案

pandas, convert DataFrame to MultiIndex'ed DataFrame(1个答案)
Sorting a pandas DataFrame by one level of a MultiIndex(1个答案)
11天前关闭
我有一个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 A街|AZ| GMC| 1111 |
| | | | Honda | 4444 |
| 爱丽丝|456 X街|AZ|斯巴鲁| 6666 |
| 鲍勃|123 B St| TX|马自达| 2222 |
| 卡罗尔|123 C St| CA|特斯拉| 3333 |
| | | | Nissan | 5555 |
| | | | Mazda | 7777 |
| 马特|123 M St|马|别克| 8888 |

代码尝试

我尝试了以下代码,但它没有将具有相同多索引值的所有数据行分组:

df = df.set_index(keys=['Name', 'Address', 'State'])

谢谢你能提供的任何帮助。

kokeuurv

kokeuurv1#

你可以在设置索引后对它进行排序,但是你最终会得到所有的Alice值组合在一起:

df.set_index(keys=['Name', 'Address', 'State']).sort_index()

输出量:

Car  Miles
Name  Address  State
Alice 123 A St AZ        GMC   1111
               AZ      Honda   4444
      456 X St AZ     Subaru   6666
Bob   123 B St TX      Mazda   2222
Carol 123 C St CA      Tesla   3333
               CA     Nissan   5555
               CA      Mazda   7777
Matt  123 M St MA      Buick   8888

为了得到接近你想要的结果,你需要先在['Address', 'State', 'Name']上索引,然后在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

相关问题