首页 > 解决方案 > Pandas 将字典嵌入到列名匹配键的列中

问题描述

我在 Pandas 中有以下数据框:

column_names = ["item", "item_dict", "loc1", "loc2", "loc3", "loc4", "loc5", "loc6", "loc7", "loc8", "loc9"]
data = [['p26CE0DEAC1', {'loc1': 50, 'loc4': 50, 'loc7': 33}, 0, 0, 0, 0, 0, 0, 0, 0, 0], ['p5505CB1A96', {'loc1': 48}, 0, 0, 0, 0, 0, 0, 0, 0, 0], ['p1B9E6A73EC', {}, 0, 0, 0, 0, 0, 0, 0, 0, 0]]

df_sample = pd.DataFrame(data, columns = column_names)

第一列[“item”]是项目的标识号。第二列 ["item_dict"] 是一个字典,其键显示项目位置,值显示该位置的项目数量。第三到第十一列对应于存储项目的每个位置,并且这些列标签与 item_dict 列中的键匹配。

我要弄清楚的是如何获取嵌入在每一行的 item_dict 列中的字典,并将值移动到名称与该字典中的键匹配的列中。

我希望输出最终成为:

column_names = ["item", "item_dict", "loc1", "loc2", "loc3", "loc4", "loc5", "loc6", "loc7", "loc8", "loc9"]
data = [['p26CE0DEAC1', {'loc1': 50, 'loc4': 50, 'loc7': 33}, 50, 0, 0, 50, 0, 0, 33, 0, 0], ['p5505CB1A96', {'loc1': 48}, 48, 0, 0, 0, 0, 0, 0, 0, 0], ['p1B9E6A73EC', {}, 0, 0, 0, 0, 0, 0, 0, 0, 0]]

df_sample = pd.DataFrame(data, columns = column_names)

作为一个爱好者,我不知道如何做到这一点。我的每一次尝试都是可怕的失败。如果有人甚至有使用嵌入在 pandas 数据框中的字典的参考,他们可以指向我,我会很感激,但我无法在堆栈溢出中找到任何解决这种情况的内容。

标签: pandasdictionary

解决方案


df.update(df["item_dict"].apply(pd.Series))
>>> df
          item                             item_dict  loc1  loc2  loc3  loc4  loc5  loc6  loc7  loc8  loc9
0  p26CE0DEAC1  {'loc1': 50, 'loc4': 50, 'loc7': 33}  50.0     0     0  50.0     0     0  33.0     0     0
1  p5505CB1A96                          {'loc1': 48}  48.0     0     0   0.0     0     0   0.0     0     0
2  p1B9E6A73EC                                    {}   0.0     0     0   0.0     0     0   0.0     0     0

推荐阅读