ITMISS
设置d1 = {'A': [1, 2, 3, 4, 5, 6, 7], 'B': [12, 13, 14, 15, 16, 17, 18]}d2 = {'A': [8, 9, 10, 11, 12, 13, 14], 'B': [18, 19, 20, 21, 22, 23, 24]}categories = ['M', 'P']dcts = [d1, d2]假设您知道哪个类别与哪个字典对应,您可以重组您的字典并使用concat:dfs = [ pd.DataFrame([[k, el, cat] for k, v in dct.items() for el in v]) for dct, cat in zip(dcts, categories)]cols = {'columns': {0: 'Name', 1: 'Value', 2: 'Category'}}pd.concat(dfs).reset_index(drop=True).rename(**cols) Name Value Category0 A 1 M1 A 2 M2 A 3 M3 A 4 M4 A 5 M5 A 6 M6 A 7 M7 B 12 M8 B 13 M9 B 14 M10 B 15 M11 B 16 M12 B 17 M13 B 18 M14 A 8 P15 A 9 P16 A 10 P17 A 11 P18 A 12 P19 A 13 P20 A 14 P21 B 18 P22 B 19 P23 B 20 P24 B 21 P25 B 22 P26 B 23 P27 B 24 P
莫回无
解决方案这是一种比 user3483203 建议的更讨人喜欢的方法。这避免了不必要的迭代,速度更快(对于足够大的数据集),并且更符合习惯。m = {'A':[1,2,3,4,5,6,7], 'B':[12,13,14,15,16,17,18]}p = {'A':[8,9,10,11,12,13,14], 'B':[18,19,20,21,22,23,24]}p_df = pd.DataFrame(p).melt(value_name='value')m_df = pd.DataFrame(m).melt(value_name='value')p_df['category'] = 'P'm_df['category'] = 'M'result = pd.concat([m_df, p_df], ignore_index=True)基准(对于更大的数据集):m = {'A': list(range(0, 100_000)), 'B': list(range(100_000, 200_000))}p = {'A': list(range(200_000, 300_000)), 'B': list(range(300_000, 400_000))}开始了:%%timeitp_df = pd.DataFrame(p).melt(value_name='value')m_df = pd.DataFrame(m).melt(value_name='value')p_df['category'] = 'P'm_df['category'] = 'M'result = pd.concat([m_df, p_df], ignore_index=True)每个循环 120 ms ± 3.16 ms(7 次运行的平均值 ± 标准偏差,每次 10 次循环)%%timeitcategories = ['M', 'P']dcts = [m, p]dfs = [ pd.DataFrame([[k, el, cat] for k, v in dct.items() for el in v]) for dct, cat in zip(dcts, categories)]cols = {'columns': {0: 'Name', 1: 'Value', 2: 'Category'}}result = pd.concat(dfs).reset_index(drop=True).rename(**cols)每个循环 207 ms ± 8.9 ms(7 次运行的平均值 ± 标准偏差,每次 1 次循环)