我有一个如下所示的初始数据框:
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
但我被困在这里了。
您不需要为此进行数据透视,只需仅在
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