我有以下情况: 我有一个带有'revisions'列的数据框,它被编组为包含多个其他字典的字典,其中包含键'a'和'b'。 修订属于密钥列id。我试图做的是摆脱dict格式。因此,我想为每个子字典列出其值以及数据帧的其他列。然后新列应采用密钥的名称('a'和'b')
初始数据框:
id column2 (dict_column) column3
0 {{'a': 91125, 'b': 233}{'a': 955, 'b': 267}} Marc
1 {{'a': 91875, 'b': 455}{'a': 115, 'b': 267}} Robert
2 {{'a': 91955, 'b': 354}{'a': 255, 'b': 267}} George
3 {{'a': 91565, 'b': 987}} Peter
4 {{'a': 95925, 'b': 896}} Hans
我的目标:
id a b column3
0 91125 233 Marc
0 955 267 Marc
1 91875 455 Robert
1 115 267 Robert
2 91955 354 George
2 255 267 George
3 91565 987 Peter
4 95925 896 Hans
现在,我搜索了一种方法,通过使用pd.concat找到了一个很好的solution。
df = pd.concat([pd.DataFrame(x) for x in df['column2']],keys=df['id']).reset_index(level=1, drop=True).reset_index()
现在我的问题是'第3列会丢失并返回以下数据框:
id a b
0 91125 233
0 955 267
1 91875 455
1 115 267
2 91955 354
2 255 267
3 91565 987
4 95925 896 ´
你们知道我做错了什么吗?
非常感谢提前,
格尔茨
答案 0 :(得分:0)
您正在将Series column2扩展为数据框,然后将该数据框重新分配给df。 pd.concat内部发生的一切都不包括column3。因此,当您将此结果重新分配给df时,您将失去column3。我知道如何解决这个问题的最好方法是将column2的扩展分配给一个新变量,然后将merge更改回df。
s = pd.concat([pd.DataFrame(x) for x in df['column2']],keys=df['id']).reset_index(level=1, drop=True).reset_index()
new_df = s.merge(df[['id','column3']],on='id')