如何解压行 pandas 数据框中的字典

How to unpack dictionaries in rows pandas dataframe

我在 pandas 中有一个数据框,看起来像这样:

id   column_name_1                         column_name_2                          column_name_3        
1    {acct_nr_1: value, acct_nr_2:value}   {acct_nr_1: value, acct_nr_2:value}    {acct_nr_1: value, acct_nr_2:value}    
2    {acct_nr_1: value, acct_nr_2:value}   {acct_nr_1: value, acct_nr_2:value}    {acct_nr_1: value, acct_nr_2:value}       
3    {acct_nr_1: value, acct_nr_2:value}   {acct_nr_1: value, acct_nr_2:value}    {acct_nr_1: value, acct_nr_2:value}       
4    {acct_nr_1: value, acct_nr_2:value}   {acct_nr_1: value, acct_nr_2:value}    {acct_nr_1: value, acct_nr_2:value} 

有些词典有两个以上的帐号,而且数值不一样。我想要做的是获得一个包含相同列加一列的数据框。新列应该有帐号(如果我只有在字典中)并且如果有多个帐户但分为几行则相同。在每一列中,我只想获取值。

所以新的dataframe应该是这样的:

id   account_number        column_name_1   column_name_2   column_name_3        
1    acct_nr_1             value           value           value
1    acct_nr_2             value           value           value
2    acct_nr_1             value           value           value          
2    acct_nr_2             value           value           value
3    acct_nr_1             value           value           value    
3    acct_nr_2             value           value           value
4    acct_nr_1             value           value           value
4    acct_nr_2             value           value           value

我找不到解决它的简单(或任何)方法。

谢谢!

堆叠 df 以转换为具有两个级别的多索引系列,然后从字典创建一个新的数据框,stack新的 df 以转换为具有三个级别的多索引系列,现在 unstack级别 1 重塑回所需格式

s = df.set_index('id').stack()

(pd.DataFrame([*s], index=s.index)
  .stack()
  .unstack(1)
  .rename_axis(['id', 'account_number'])
  .reset_index())

   id account_number column_name_1 column_name_2 column_name_3
0   1      acct_nr_1         value         value         value
1   1      acct_nr_2         value         value         value
2   2      acct_nr_1         value         value         value
3   2      acct_nr_2         value         value         value
4   3      acct_nr_1         value         value         value
5   3      acct_nr_2         value         value         value
6   4      acct_nr_1         value         value         value
7   4      acct_nr_2         value         value         value