python - Pandas 从系列扩展到多索引

标签 python pandas dataframe

我在 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/

相关文章:

python - 将 pyarrow 模式分配给 pa.Table.from_pandas()

python - pywinauto:type_keys 将文本发送到错误的文本框

python - 有没有一种方法可以按元素过滤 pandas groupby 结果?

python - 通过重复序列填充列

python - 在运行时用函数重载方法

python - 带条件的数组过滤

python - 如果条目数小于一定数量,则每隔 15 秒删除所有条目

python - 如何将 pandas DataFrame 转换为 TimeSeries?

python - 计算数据帧中属于给定日期时间间隔的唯一值

python - 无法在python数据框中将列类型从对象转换为str