在列熊猫中取消嵌套数据帧



我在数据帧的列中有数据帧。我想取消嵌套它们,以便每个 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)

想法是创建DataFrame字典,按col1列索引,以便可以一起concat。然后reset-index用于删除每个数据帧的原始索引值,第二个用于将索引转换为列:

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

最新更新