我正在寻找一种以以下方式在pandas中堆叠数据框的方法:
id val
id01 ['a', 'b']
id02 ['b']
id03 []
id04 ['a','c']
至:
id01 'a'
'b'
id02 'b'
id04 'a'
'c'
最佳答案
如果要Series
和MultiIndex
一起使用stack
和DataFrame
建设者:
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