从现有数据框列创建新数据框(如果不为空)

时间:2019-12-18 21:08:01

标签: python pandas

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

1 个答案:

答案 0 :(得分:2)

使用DataFrame.melt

( df.melt('Name',value_name='Preference')
    .drop('variable',axis=1)
    .dropna()
    .sort_values('Name')
    .reset_index(drop=True) )

DataFrame.stackDataFrame.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