包含两个索引的列上的数据透视表

问题描述 投票:0回答:1

我有一个如下所示的初始数据框:

   Row tags                  Values
0  4                         100
1  100101 - Hospital A.xls   30
2  100195 - Hospital B.xls   30
3  100105 - Hospital C.xls   40
4  5                         50
5  100101 - Hospital A.xls   25
6  100195 - Hospital B.xls   25

只要

Row tags
中有数字(即没有 .xls 结尾),其值就对应于其下方各行的总和。接下来可以有任意数量的行。

我想以这些数字为中心,以获得所需的输出

   Code   Hospital                  Values
0  4      100101 - Hospital A.xls   30
1  4      100195 - Hospital B.xls   30
2  4      100105 - Hospital C.xls   40
3  5      100101 - Hospital A.xls   25
4  5      100195 - Hospital B.xls   25

我尝试过的事情:

由于

Row tags
中存在可以使用正则表达式捕获的模式,因此我创建了一个带有布尔列的中间表,用于区分数字条目和以 .xls 结尾的条目。

   Row tags                  Values   Regex pattern
0  4                         100      False
1  100101 - Hospital A.xls   30       True
2  100195 - Hospital B.xls   30       True
3  100105 - Hospital C.xls   40       True
4  5                         50       False
5  100101 - Hospital A.xls   25       True
6  100195 - Hospital B.xls   25       True

但我被困在这里了。

python pandas dataframe pivot-table
1个回答
0
投票

您不需要为此进行数据透视,只需仅在

Row tags
中搜索数字并相应地调整数据框:

nums = df["Row tags"].str.extract(r"^(\d+)$")
df["Code"] = nums.ffill()
df = df[nums.isna().values]

print(df)

打印:

                  Row tags  Values Code
1  100101 - Hospital A.xls      30    4
2  100195 - Hospital B.xls      30    4
3  100105 - Hospital C.xls      40    4
5  100101 - Hospital A.xls      25    5
6  100195 - Hospital B.xls      25    5
© www.soinside.com 2019 - 2024. All rights reserved.