我正在寻找一种以以下方式在pandas中堆叠数据框的方法:

id     val
id01   ['a', 'b']
id02   ['b']
id03   []
id04   ['a','c']


至:

id01   'a'
       'b'
id02   'b'
id04   'a'
       'c'

最佳答案

如果要SeriesMultiIndex一起使用stackDataFrame建设者:

s = pd.DataFrame(df['val'].values.tolist(), index=df['id']).stack()
print (s)
id
id01  0    a
      1    b
id02  0    b
id04  0    a
      1    c
dtype: object




如果需要DataFrame,请添加双reset_index-首先删除第二级的MultiIndex,第二级从索引中创建列:

df = (pd.DataFrame(df['val'].values.tolist(), index=df['id'])
        .stack()
        .reset_index(level=1, drop=True)
        .reset_index(name='val'))
print (df)
     id val
0  id01   a
1  id01   b
2  id02   b
3  id04   a
4  id04   c


最后,如果需要替换重复的值,请使用loc + duplicated

df.loc[df['id'].duplicated(), 'id'] = ''
print (df)
     id val
0  id01   a
1         b
2  id02   b
3  id04   a
4         c

10-08 18:05