如何基于含多值的字典为Pandas DataFrame生成指定格式的新列?
解决方案
你的问题核心是字典里的单个字符串会被当成字符序列拆分,得先把字典所有值统一成列表格式再处理,以下是两种符合需求的实现方式:
方案一:拆分至多列,空白填充
先把字典里的单个字符串转成单元素列表,再映射拆分列:
import pandas as pd data = ['One', 'Two', 'Three', 'Four'] df = pd.DataFrame(data, columns=['Count']) dictionary = {'One':'Red', 'Two':['Red', 'Blue'], 'Three':'Green','Four':['Green','Red', 'Blue']} # 统一字典值格式:单个字符串转成单元素列表 processed_dict = {k: [v] if isinstance(v, str) else v for k, v in dictionary.items()} # 映射后拆分多列,空值用空白填充 expanded_cols = df['Count'].map(processed_dict).apply(pd.Series).fillna('') # 和原表拼接,给新列命名 result = pd.concat([df, expanded_cols], axis=1) result.columns = ['Count'] + [f'Color_{i+1}' for i in range(expanded_cols.shape[1])] print(result)
运行后输出:
Count Color_1 Color_2 Color_3 0 One Red 1 Two Red Blue 2 Three Green 3 Four Green Red Blue
方案二:逗号分隔存入单列
同样先统一格式,再把列表转成逗号分隔的字符串:
import pandas as pd data = ['One', 'Two', 'Three', 'Four'] df = pd.DataFrame(data, columns=['Count']) dictionary = {'One':'Red', 'Two':['Red', 'Blue'], 'Three':'Green','Four':['Green','Red', 'Blue']} # 直接生成逗号分隔的单列 df['Colors'] = df['Count'].map( lambda x: ', '.join([dictionary[x]] if isinstance(dictionary[x], str) else dictionary[x]) ) print(df)
运行后输出:
Count Colors 0 One Red 1 Two Red, Blue 2 Three Green 3 Four Green, Red, Blue
内容的提问来源于stack exchange,提问作者Nairda123
相关产品推荐
相关产品推荐

