我在 CSV 文件中提供了以下系列,具有扁平、不寻常的数据结构。所以我试图清理它并在 pandas 中正确地对其进行制表/索引,并且我认为 MultiIndex 是表示数据的最佳方式。
SERVICE 1 NaN
Units 6
Amount 5
Foo bar
NaN NaN
SERVICE 2 NaN
Units 6
Amount 22
Foo bar
NaN NaN
SERVICE 3 NaN
Units 77
Amount 153
Foo 16
等等。
大写字母的索引实际上是我想要创建的作为 MultiIndex 的“第一级”的级别,而低于它的索引则作为“第二级”。因此,这将允许通过“SERVICE”访问数据,然后通过“Units/Amount/Foo”等访问数据。不确定解决此问题的最佳方法是。
我使用了 df[df.index.str.isupper().fillna(False)].index 来为我提供“1 级”索引,但我遇到了在此之后该去哪里的障碍。
最佳答案
您可以使用 where
+ ffill
创建第一个关卡。然后删除不需要的行并设置索引。如果需要,请删除第二级中的 NaN
条目
df['idx']= df[0].where(df[0].str.contains('SERVICE')).ffill()
df = df[df[0].ne(df.idx)]
df = df.set_index(['idx', 0])
df = df[df.index.get_level_values(1).notnull()]
1
idx 0
SERVICE_1 Units 6
Amount 5
Foo bar
SERVICE_2 Units 6
Amount 22
Foo bar
SERVICE_3 Units 77
Amount 153
Foo 16
关于python - Pandas 从系列扩展到多索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57185680/