Skip to main content
 首页 » 编程设计

python之将数据框与其中一列中的字典数据连接起来

2025年05月04日13think

我的数据是这样的:

>>> df = pd.DataFrame({'order_id': ['A', 'B'], 
..                    'items': [[{'item': 1, 'color': 'blue' }, 
...                               {'item': 2, 'color': 'red'  }], 
...                              [{'item': 3, 'color': 'green'}, 
...                               {'item': 2, 'color': 'pink' }]]}, 
...                   columns= ['order_id', 'items']) 
>>> df 
  order_id                                                          items 
0        A    [{'item': 1, 'color': 'blue'}, {'item': 2, 'color': 'red'}] 
1        B  [{'item': 3, 'color': 'green'}, {'item': 2, 'color': 'pink'}] 

items 列包含我希望作为数据框列的字典:

  order_id        item         color 
0        A           1          blue 
1        A           2           red 
2        B           3         green 
3        B           2          pink 

即字典的每一项都应该有自己的一行。

到目前为止,我所做的是逐行迭代并在新数据框中创建数据:

df2 = pd.DataFrame(columns=['order_id', 'item', 'color']) 
for row in df.iterrows(): 
    for items in (row[1]['items']): 
        df2.loc[-1] =[row[1]['order_id'], items['item'], items['color'] ] 
        df2.index += 1 

这给了我我需要的结果:

>>> df2 
  order_id item  color 
3        A    1   blue 
2        A    2    red 
1        B    3  green 
0        B    2   pink 

有没有更有效的方法?也许在不创建另一个对象并复制所有现有列的情况下就位,因为我正在处理大量数据?

请您参考如下方法:

repeat, join, len

order_id = df.order_id.values.repeat(df['items'].str.len()) 
items = pd.DataFrame(np.concatenate(df['items']).tolist()) 
 
items.assign(order_id=order_id) 
 
   color  item order_id 
0   blue     1        A 
1    red     2        A 
2  green     3        B 
3   pink     2        B 

理解

pd.DataFrame([{**{'order_id': o}, **i} for o, I in df.values for i in I]) 
 
   color  item order_id 
0   blue     1        A 
1    red     2        A 
2  green     3        B 
3   pink     2        B