如何用Python从不同列表创建指定格式的DataFrame?
简洁实现方法
这里提供两种简洁优雅的实现方式,都能快速生成你需要的DataFrame:
方法一:利用Pandas Series索引对齐特性(推荐)
这种方法充分利用Pandas的内置功能,代码简洁且高效:
import pandas as pd # 定义原始数据 volumes1 = ['Shield', 'Side', 'expHall', 'Funnel', 'gridpiece'] counts1 = [3911, 1479, 553, 368, 342] volumes2 = ['Shield', 'leg', 'Funnel', 'gridpiece','wafer'] counts2 = [291, 469, 73, 28, 32] # 将两组数据转换为Series,索引为volume名称 series1 = pd.Series(counts1, index=volumes1, name='counts1') series2 = pd.Series(counts2, index=volumes2, name='counts2') # 获取所有唯一的volume名称 all_volumes = series1.index.union(series2.index) # 重新索引并填充缺失值为0,合并为DataFrame result_df = pd.concat( [series1.reindex(all_volumes, fill_value=0), series2.reindex(all_volumes, fill_value=0)], axis=1 ).reset_index().rename(columns={'index': 'volumes'}) print(result_df)
核心逻辑是通过reindex自动对齐索引,缺失的位置用0填充,再合并成表格,完全匹配你需要的输出格式。
方法二:字典映射法(逻辑直观,适合新手理解)
如果想更清晰地看到数据填充过程,可以用字典来存储每个volume的计数:
import pandas as pd from collections import defaultdict # 定义原始数据 volumes1 = ['Shield', 'Side', 'expHall', 'Funnel', 'gridpiece'] counts1 = [3911, 1479, 553, 368, 342] volumes2 = ['Shield', 'leg', 'Funnel', 'gridpiece','wafer'] counts2 = [291, 469, 73, 28, 32] # 初始化字典,默认counts1和counts2都为0 volume_counts = defaultdict(lambda: {'counts1': 0, 'counts2': 0}) # 填充第一组数据 for vol, cnt in zip(volumes1, counts1): volume_counts[vol]['counts1'] = cnt # 填充第二组数据 for vol, cnt in zip(volumes2, counts2): volume_counts[vol]['counts2'] = cnt # 转换为DataFrame result_df = pd.DataFrame.from_dict(volume_counts, orient='index').reset_index() result_df.rename(columns={'index': 'volumes'}, inplace=True) print(result_df)
这种方法通过字典的默认值特性,自动给不存在的volume初始化0值,再逐个填充已有数据,逻辑清晰易懂。
内容的提问来源于stack exchange,提问作者saimon
相关产品推荐
相关产品推荐

