使用Pandas提取字符串字符并重构DataFrame
解决方法
我来给你一步步搞定这个需求哈,咱们先把数据格式统一,再生成对应的独热编码列就行:
步骤1:统一Groups列的格式
原数据里Groups列混合了列表和单个字符串,咱们先把所有行都转成列表格式,方便后续处理:
import pandas as pd from itertools import chain # 你的原始DataFrame df = pd.DataFrame({ 'Date': ['2017-1-1', '2017-1-2', '2017-1-3'], 'Groups': [['one','two'], ['one','three'], 'four'] }) # 把单个字符串转为单元素列表,统一格式 df['Groups'] = df['Groups'].apply(lambda x: x if isinstance(x, list) else [x])
步骤2:提取所有唯一的分组值
接下来咱们找出所有出现过的分组,用来生成后续的列:
# 扁平化所有Groups列表,获取唯一值并排序 all_groups = sorted(set(chain(*df['Groups'])))
步骤3:生成独热编码列
对每个分组,判断每行的Groups里是否包含该分组,包含标记1,否则标记0:
for group in all_groups: df[group] = df['Groups'].apply(lambda x: 1 if group in x else 0)
可选:还原Groups列的字符串格式
如果想要把Groups列变回你示例里的逗号分隔字符串(比如one, two),可以再加这一步:
df['Groups'] = df['Groups'].apply(lambda x: ', '.join(x))
最终结果
运行完上面的代码后,你就能得到完全符合预期的DataFrame:
Date Groups one two three four 0 2017-1-1 one, two 1 1 0 0 1 2017-1-2 one, three 1 0 1 0 2 2017-1-3 four 0 0 0 1
内容的提问来源于stack exchange,提问作者ah bon
相关产品推荐
相关产品推荐

