我有以下数据框:
'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)
提前感谢您的想法!
答案 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