如何从具有相同键值的两个字典创建Pandas数据帧?

2024-04-26 17:28:11 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有两本字典,形式如下:

{'A':[1,2,3,4,5,6,7],
 'B':[12,13,14,15,16,17,18} - Belongs to category "M"

{'A':[8,9,10,11,12,13,14],
 'B':[18,19,20,21,22,23,24]} - Belongs to category "P"

现在得到的数据帧应该是-

^{pr2}$

等等。这样的事情怎么能实现呢?在


Tags: to数据字典事情形式categorybelongspr2
2条回答

设置

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

^{pr2}$

^{3}$

解决方案

这里有一个比用户3483203所建议的方法更适合的方法。这避免了不必要的迭代,速度更快(对于足够大的数据集),并且更具惯用性。在

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)

基准(对于更大的数据集):

^{pr2}$

开始吧:

^{3}$

每个回路120 ms±3.16 ms(平均值±标准偏差,7次运行,每个回路10次)

%%timeit
categories = ['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次)

相关问题 更多 >