【问题标题】:Dataframes columns get lost after using pd.concat使用 pd.concat 后数据框列丢失
【发布时间】:2018-06-01 07:55:39
【问题描述】:

我有以下情况: 我有一个带有“修订”列的数据框,该列被格式化为一个字典,其中包含多个其他字典,键为“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()

现在我的问题'column 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】:

    您正在将 Series 列 2 扩展为一个数据框,然后将该数据框重新分配给 df。 pd.concat 内部发生的所有事情都不包括 column3。因此,当您将此结果重新分配给 df 时,您会丢失 column3。我知道如何解决这个问题的最好方法是将 column2 的扩展分配给一个新变量,然后合并回到 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')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-23
      • 1970-01-01
      • 1970-01-01
      • 2022-01-25
      • 1970-01-01
      • 1970-01-01
      • 2021-07-31
      • 1970-01-01
      相关资源
      最近更新 更多