我在CSV文件中提供了以下系列的文件,这些文件具有扁平的,异常的数据结构。因此,我试图将其清理并制成表格并在熊猫中正确编制索引,我认为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的“级别1”的级别,而其下方的那些级别则为“第二级别”。因此,这将允许通过“ SERVICE”然后通过“ Units / Amount / Foo”等访问数据。不确定实现此目的的最佳方法是。
我曾经使用df[df.index.str.isupper().fillna(False)].index
为我提供“ 1级”索引,但是在此之后我遇到了障碍。
答案 0 :(得分:2)
您可以使用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