Pandas:将列名压缩为单元格值,其中为True

Joh*_*ohn 4 python dataframe pandas

我有一个看起来像的数据框

ID       Cat1    Cat2    Cat3    Cat4
3432432  True    False   True    False
1242323  False   True    False   False
3423883  False   False   False   True
Run Code Online (Sandbox Code Playgroud)

如何将其转换为选择第一列为True的数据框?

ID       Status    
3432432  Cat1
1242323  Cat2
3423883  Cat4
Run Code Online (Sandbox Code Playgroud)

DSM*_*DSM 8

你可以利用idxmax将返回第一个True 的事实:

>>> df.set_index("ID").idxmax(axis=1).reset_index(name="Status")
        ID Status
0  3432432   Cat1
1  1242323   Cat2
2  3423883   Cat4
Run Code Online (Sandbox Code Playgroud)

这是有效的,因为我们有

>>> df.iloc[:,1:]
    Cat1   Cat2   Cat3   Cat4
0   True  False   True  False
1  False   True  False  False
2  False  False  False   True
>>> df.iloc[:,1:].idxmax(axis=1)
0    Cat1
1    Cat2
2    Cat4
dtype: object
Run Code Online (Sandbox Code Playgroud)