如何基于字符串和规则展开Python Pandas DataFrame
实现字符串模板按类型展开的方法
需求说明
将包含占位符的字符串模板(StringDataFrame),依据类型映射表(ThingsDataFrame)展开为每个模板对应所有同类型事物的字符串。
准备数据
先定义两个初始DataFrame:
import pandas as pd # StringDataFrame string_df = pd.DataFrame({ "String": [ "Jon likes {ExplodeAnimals}.", "Jon eats {ExplodeFruit}." ] }) # ThingsDataFrame things_df = pd.DataFrame({ "Thing": ["Cats", "Dogs", "Tigers", "Llamas", "Apples", "Pears", "Bananas", "Strawberries"], "Type": ["animal", "animal", "animal", "animal", "fruit", "fruit", "fruit", "fruit"] })
实现步骤
- 提取占位符与类型的映射
从字符串模板中提取占位符,并转换为对应的类型(比如{ExplodeAnimals}对应animal):
# 提取占位符并映射到Type string_df["Placeholder"] = string_df["String"].str.extract(r"\{(.*?)\}")[0] string_df["Type"] = string_df["Placeholder"].str.replace("Explode", "").str.lower()
- 关联两个DataFrame并替换占位符
通过Type字段关联两个表,用Thing替换模板中的占位符:
# 关联表 merged_df = string_df.merge(things_df, on="Type", how="left") # 替换占位符生成最终字符串 merged_df["String"] = merged_df.apply( lambda row: row["String"].replace(f"{{{row['Placeholder']}}}", row["Thing"]), axis=1 )
- 整理结果
保留需要的String列,得到目标格式:
result_df = merged_df[["String"]].reset_index(drop=True)
最终结果
运行后得到的result_df如下:
| String |
|---|
| Jon likes Cats. |
| Jon likes Dogs. |
| Jon likes Tigers. |
| Jon likes Llamas. |
| Jon eats Apples. |
| Jon eats Pears. |
| Jon eats Bananas. |
| Jon eats Strawberries. |
内容的提问来源于stack exchange,提问作者user1574881
相关产品推荐
相关产品推荐

