Pandas获取多个列并将它们转换为一列字典对象?

2024-06-16 10:26:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图通过将额外的列组合到字典中来转换数据帧

我的数据帧将始终至少有四列:record、yhat、residential和hat,在不同的情况下会有额外的列。 我目前的df头如下所示:

   record    yhat  residual      hat   RinvRes  AOMstat
0       1  6.7272  -0.57130  0.04985  0.009825  0.02041                
1       2  6.5568   0.19460  0.09771 -0.014930 -0.03078                
2       3  6.5457   0.16190  0.09765  0.272800  0.56260

如果我们看一下顶部的一栏,我们会看到另外两栏,RinvRes和AOMstat

   record    yhat  residual      hat   RinvRes  AOMstat
0       1  6.7272  -0.57130  0.04985  0.009825  0.02041  

我想将这些列合并到字典中,其中列名是字典中的一个键,例如:

   record    yhat  residual      hat   additional
0       1  6.7272  -0.57130  0.04985   {“RinvRes“: “0.2291E-01“, “AOMstat“ : “0.3224E-01“}

Tags: 数据df字典hat情况recordadditionalyhat
3条回答

尽管上述答案更优雅、更有效,但这里有一个更简单的版本:

rinvres = df['RinvRes'].values.tolist()
aomstat = df['AOMstat'].values.tolist()
df.drop(['RinvRes', 'AOMstat'], axis=1)

additional = []

for i in range(len(rinvres)):
    add = {
        'RinvRes': rinvres[i],
        'AOMstat': aomstat[i]
    }

    additional.append(add)

df['additional'] = additional

在与.join.agg(dict).drop的一个步骤中

首先创建聚合列的列表

agg_cols = ['RinvRes', 'AOMstat']

df1 = df.join(df[agg_cols].agg(dict,axis=1)\
                          .to_frame('additional')).drop(agg_cols,1)

打印(df1)

   record    yhat  residual      hat                                  additional
0       1  6.7272   -0.5713  0.04985   {'RinvRes': 0.009825, 'AOMstat': 0.02041}
1       2  6.5568    0.1946  0.09771  {'RinvRes': -0.01493, 'AOMstat': -0.03078}
2       3  6.5457    0.1619  0.09765      {'RinvRes': 0.2728, 'AOMstat': 0.5626}

IIUC,从4列的列表开始,您可以使用difference获取额外的列名称,并使用to_dict对它们进行聚合

# columns you have in common
keep_cols = ['record', 'yhat', 'residual', 'hat']

# get columns to agg into dict
extra_cols = df.columns.difference(keep_cols)
# create the result
new_df = (
    df[keep_cols]
      .assign(additional = df[extra_cols].agg(lambda x: x.to_dict(), axis=1))
)

print(new_df)
   record    yhat  residual      hat  \
0       1  6.7272   -0.5713  0.04985   
1       2  6.5568    0.1946  0.09771   
2       3  6.5457    0.1619  0.09765   

                                   additional  
0   {'AOMstat': 0.02041, 'RinvRes': 0.009825}  
1  {'AOMstat': -0.03078, 'RinvRes': -0.01493}  
2      {'AOMstat': 0.5626, 'RinvRes': 0.2728}  

相关问题 更多 >