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