我有一个Pandas DataFrame,其中的列包含一些行而不是其他行的数据。我需要将几列合并为一列,以删除丢失的数据。例如:
Name Preference_1 Preference_2 Preference_3 Preference_4
0 Dave Beach Lake Mountain Desert
1 Jeff Outdoors NaN NaN NaN
2 Tom Forest Ocean Swamp NaN
需要成为这个:
Name Preference
0 Dave Beach
1 Dave Lake
2 Dave Mountain
3 Dave Desert
4 Jeff Outdoors
5 Tom Ocean
6 Tom Swamp
7 Tom Forest
答案 0 :(得分:2)
( df.melt('Name',value_name='Preference')
.drop('variable',axis=1)
.dropna()
.sort_values('Name')
.reset_index(drop=True) )
或DataFrame.stack
和DataFrame.set_index
:
df.set_index('Name').stack().rename('Preference').reset_index(level=['Name',0],drop=0)
输出
Name Preference
0 Dave Beach
1 Dave Lake
2 Dave Mountain
3 Dave Desert
4 Jeff Outdoors
5 Tom Forest
6 Tom Ocean
7 Tom Swamp