我有一个宽数据框,其中的几列使用布尔值描述每一行的类型。
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)。
答案 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