熊猫从系列扩展到MultiIndex

时间:2019-07-24 14:48:33

标签: python pandas dataframe

我在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级”索引,但是在此之后我遇到了障碍。

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