熊猫列中的嵌套数据框

时间:2019-09-09 13:33:11

标签: python pandas dataframe

我在数据框的列中有数据框。我想取消嵌套它们,以便每个df都作为行出现。

输入df:

# dummy data
df = pd.DataFrame.from_dict(
    {
        'col1': [1, 2],
        'col2': [pd.DataFrame.from_dict(
            {'inner_col1': ['one', 'two', 'three'],
            'inner_col2': ['four', 'five', 'six']}),
                 pd.DataFrame.from_dict(
            {'inner_col1': ['seven', 'eight', 'nine'],
            'inner_col2': ['ten', 'eleven', 'twelve']})
                ]
    }
)

# Output
    col1    col2
0   1   inner_col1 inner_col2 0 one fou...
1   2   inner_col1 inner_col2 0 seven te...

必需的输出:

    col1   inner_col1   inner_col2
0   1      one              four
1   1      two              five
2   1      three            six
3   2      seven            ten
4   2      eight            eleven
5   2      nine             twelve

我试图做的事(但失败了):

pd.concat(df.drop('col2', axis=1), df.col2)

1 个答案:

答案 0 :(得分:2)

想法是创建DataFrame字典,其索引由col1列索引,因此可能concat在一起。然后reset-index用于删除每个DataFrame的原始索引值,第二用于将索引转换为列:

df = (pd.concat(df.set_index('col1').pop('col2').to_dict())
       .rename_axis(('col1','new'))
       .reset_index(level=0)
       .reset_index(drop=True))
print (df)

   col1 inner_col1 inner_col2
0     1        one       four
1     1        two       five
2     1      three        six
3     2      seven        ten
4     2      eight     eleven
5     2       nine     twelve