如何将布尔列从宽表更改为长表

时间:2019-11-08 17:55:46

标签: python pandas

我有一个宽数据框,其中的几列使用布尔值描述每一行的类型。

df = pd.DataFrame({'ID': [0, 1, 2, 3], 'Name': ['x', 'y', 'z', 'e'],
                   'Type One': [True, False, False, False], 
                   'Type Two': [False, True, True, True]})

如下所示:

   ID Name  Type One  Type Two
0   0    x      True     False
1   1    y     False      True
2   2    z     False      True
3   3    e     False      True

我希望此数据帧采用长格式,以便每一行都与Type相匹配:

   ID Name  Type  
0   0    x     Type One
1   1    y     Type Two
2   2    z     Type Two
3   3    e     Type Two

注意:我相信所有ID都只有1种类型(因此,如果Type One为True,Type N必须为False)。

2 个答案:

答案 0 :(得分:2)

这是dot

s = df[['Type One', 'Type Two']]
s.dot(s.columns)

输出:

0    Type One
1    Type Two
2    Type Two
3    Type Two
dtype: object

答案 1 :(得分:0)

df['Type'] = None
df.loc[df['Type One'], 'Type'] = 'Type One'
df.loc[df['Type Two'], 'Type'] = 'Type Two'
df.drop(columns=['Type One', 'Type Two'], inplace=True)

输出:

   ID Name      Type
0   0    x  Type One
1   1    y  Type Two
2   2    z  Type Two
3   3    e  Type Two