有一个pandas数据框,其中包含一组可能具有任何长度的集合:
n = np.nan
stack1 = pd.DataFrame.from_dict(
{'letter1': ['a','b','c','y'],
'letter2': [ 'o','p', 'q', 'y'],
'overlap': [ {'v'},{'c'}, {'c'}, {'v', 'c'}]
})
stack1.reset_index(inplace=True, drop=True)
从这个数据框中,我如何解压缩集合的内容并从每个解压缩的元素中创建新行?如果解决方案也适用于列表和元组等其他容器,那将是很好的。
期望的结果:
答案 0 :(得分:1)
试试这个:
In [32]: col_to_unpack = 'overlap'
In [33]: df = stack1.copy()
In [34]: pd.DataFrame({
...: col:np.repeat(df[col].values, df[col_to_unpack].str.len())
...: for col in df.columns.difference([col_to_unpack])
...: }).assign(**{col_to_unpack:np.concatenate(df[col_to_unpack].map(list).values)})[df.columns.tolist()]
...:
Out[34]:
letter1 letter2 overlap
0 a o v
1 b p c
2 c q c
3 y y c
4 y y v