从底层字典的键创建数据帧行

时间:2018-03-21 15:11:08

标签: python pandas dataframe

我有以下数据框:

'A'  'B'  'Dict'
 a    f    {'k1': 'v1', 'k2': 'v2'}
 b    h    {}
 c    g    {'k3': 'v3'}
 …    …    …

我想要以下内容:

'A'  'B'  'Keys'
 a    f    k1
 a    f    k2
 c    g    k3
 …    …    …

也就是说,获取dict的键来创建新数据帧的行。 dict可能为空或包含任意数量的元素。

这是我现在使用的解决方案。它有效,但似乎非常低效,而且不是非常pythonic ......

my_list = []

for row in subset.iterrows():
  for key in row[1][2].keys():
    my_list.append((row[1][0], row[1][1], key))

new_df = pd.DataFrame(my_list)

提前感谢您的想法!

2 个答案:

答案 0 :(得分:3)

或者你可以set_index()

df.set_index(['A','B'])['Dict'].apply(pd.Series).stack().reset_index()

答案 1 :(得分:1)

您需要stack

pd.DataFrame(
   df.Dict.tolist(), 
   index=pd.MultiIndex.from_arrays([df.A, df.B])
).stack().reset_index()

   A  B level_2   0
0  a  f      k1  v1
1  a  f      k2  v2
2  c  g      k3  v3