如何基于DataFrame现有数值列、列名及元组列表新增列
解决方法:根据分组批量添加对应列值
我来帮你搞定这个需求!你需要给DataFrame按number列的分组,批量添加对应元组里的内容作为新列对吧?这里有两种简洁的实现方式:
方法一:映射+拆分元组
这种方法直接利用map把number值映射到对应的元组,再把元组拆分成指定列名的新列,代码非常直观:
import pandas as pd df = pd.DataFrame({'number':[0,0,1,1,2,2,3,3]}) keys = ['foo','bar'] combinations = [('99%',0.9),('99%',0.8),('1%',0.9),('1%',0.8)] # 创建number到对应元组的映射关系 num_combo_map = dict(zip(df['number'].unique(), combinations)) # 映射后拆分元组为两列,直接赋值给新列 df[keys] = df['number'].map(num_combo_map).apply(pd.Series) print(df)
方法二:辅助DataFrame合并
如果你的number取值不是连续的索引,这种方法更通用。先把元组列表转成带number列的辅助DataFrame,再和原表合并:
import pandas as pd df = pd.DataFrame({'number':[0,0,1,1,2,2,3,3]}) keys = ['foo','bar'] combinations = [('99%',0.9),('99%',0.8),('1%',0.9),('1%',0.8)] # 构建辅助DataFrame:包含number和对应的foo、bar值 combo_df = pd.DataFrame(combinations, columns=keys) combo_df['number'] = df['number'].unique() # 左合并原表和辅助表,确保每一行都匹配到对应的值 df = df.merge(combo_df, on='number', how='left') print(df)
两种方法运行后都会得到你想要的输出:
number foo bar 0 0 99% 0.9 1 0 99% 0.9 2 1 99% 0.8 3 1 99% 0.8 4 2 1% 0.9 5 2 1% 0.9 6 3 1% 0.8 7 3 1% 0.8
内容的提问来源于stack exchange,提问作者Johannes Wiesner
相关产品推荐
相关产品推荐

