使用pd.concat后,Dataframes列会丢失

问题描述 投票:0回答:1

我有以下情况:我有一个带有'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           ´

你们知道我做错了什么吗?

非常感谢前进,

格尔茨

python pandas dictionary dataframe concatenation
1个回答
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')
© www.soinside.com 2019 - 2024. All rights reserved.