解压缩在数据帧值中设置并复制到行中

时间:2017-02-14 21:43:48

标签: python pandas

有一个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)

enter image description here

从这个数据框中,我如何解压缩集合的内容并从每个解压缩的元素中创建新行?如果解决方案也适用于列表和元组等其他容器,那将是很好的。

期望的结果:

enter image description here

1 个答案:

答案 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