如何在Pandas中按字符串部分内容分组并构建新DataFrame
从DataFrame字符串列提取分组键并合并对应列内容的解决方案
看起来你想从列A的字符串里提取string_xxx这样的部分作为分组依据,然后把每组的B列文本用换行合并成新的DataFrame。你之前的尝试用了str.contains,得到的是布尔值的分组对象,这和你的需求不太匹配,咱们来调整一下:
步骤分解
- 提取分组键:用正则表达式从列A中提取出
string_数字格式的部分,这会作为我们的分组依据。 - 分组聚合:用提取到的分组键对原DataFrame分组,然后把每组的B列内容用
\n\n连接起来。 - 转换为目标DataFrame:把聚合后的结果整理成你想要的结构。
完整代码示例
import pandas as pd # 原DataFrame df = pd.DataFrame([ {'A': 'string_300_bla1', 'B': "Hi", 'C': 3}, {'A': 'string_300_blaa2', 'B': "Hello", 'C': 4}, {'A': 'string_487_blaaa1', 'B': "nice", 'C': 9}, {'A': 'string_487_blaaa2', 'B': "day", 'C': 6} ]) # 1. 从A列提取分组键(string_xxx格式) df['group_key'] = df['A'].str.extract(r'(string_\d+)') # 2. 按分组键分组,合并B列内容 result = df.groupby('group_key')['B'].agg('\n\n'.join).reset_index() # 3. 重命名列,匹配期望的输出格式 result.columns = ['A', 'B'] print(result)
输出结果
运行后会得到你期望的DataFrame:
A B 0 string_300 Hi\n\nHello 1 string_487 nice\n\nday
关键说明
str.extract(r'(string_\d+)'):正则表达式里的括号表示捕获组,\d+匹配一个或多个数字,这样就能精准提取出string_xxx部分。groupby('group_key')['B'].agg('\n\n'.join):按分组键分组后,对B列应用字符串连接操作,用\n\n分隔每个元素。reset_index():把分组后的索引转换成普通列,方便后续重命名。
内容的提问来源于stack exchange,提问作者ladybug
相关产品推荐
相关产品推荐

