具有如下数据框:
df = pd.DataFrame({'Col1': ('x1', 'x2', 'x3'),
'Col2': ('y1', 'y2', 'y3'),
'Sets': ({1, 2}, {2, 3, 4}, {5})})
...
Col1 Col2 Sets
0 x1 y1 {1, 2}
1 x2 y2 {2, 3, 4}
2 x3 y3 {5}
如何融合“设置”列以获得以下输出:
pd.DataFrame({'Col1': ('x1', 'x1', 'x2', 'x2', 'x2', 'x3'),
'Col2': ('y1', 'y1', 'y2', 'y2', 'y2', 'y3'),
'Col3': (1, 2, 2, 3, 4, 5)})
...
Col1 Col2 Col3
0 x1 y1 1
1 x1 y1 2
2 x2 y2 2
3 x2 y2 3
4 x2 y2 4
5 x3 y3 5
...
尝试执行以下操作...
df = df.assign(lens=[len(r) for r in df.Sets]) # get length of each set
df.lens = df.lens.astype('int32') # repeat takes only int32!
df = df.reindex(df.index.repeat(df.lens)) # repeats the rows
df = df.assign(Lists=[list(r) for r in df.Sets]) # converts sets to list
df = df.assign(Loc=df.groupby(df.index).cumcount()) # the list index
...但是不知道如何使用 Loc ...
提取 List 的值欢迎提供帮助。
答案 0 :(得分:1)
通过重复的索引创建系列,因此可以使用DataFrame.join
重复行:
s = (pd.DataFrame(df.pop('Sets').values.tolist(), index=df.index)
.stack()
.rename('Sets')
.reset_index(level=1, drop=True))
df = df.join(s).reset_index(drop=True)
print (df)
Col1 Col2 Sets
0 x1 y1 1.0
1 x1 y1 2.0
2 x2 y2 2.0
3 x2 y2 3.0
4 x2 y2 4.0
5 x3 y3 5.0