如何根据它们的布尔列值压缩熊猫数据框?

时间:2021-03-15 21:26:16

标签: python python-3.x pandas

给定一个像这样的熊猫框架:

在:

pokemon   yes     no     ignore
Vulpix    True    False  False
Nidorino  False   True   False
Growlithe False   False  True
Krokorok  False   True   False
Darumaka  False   False  True
Klefki    False   True   False
Croagunk  True    False   False

获取与 pokemon 列关联的列作为行值的正确方法是什么?:

出:

pokemon    Val
Vulpix     yes
Nidorino   no
Growlithe  ignore
Krokorok   no
Darumaka   ignore
Klefki     no
Croagunk   yes

到目前为止,我尝试使用交叉表:

pd.crosstab(df, columns=['yes', 'no', 'ignore'])

但是,我收到一个值错误:

`ValueError: Shape of passed values`

获取先前输出的正确方法是什么?

1 个答案:

答案 0 :(得分:4)

如果这些是 one-hot 编码,使得每行只有一个 1/True,列中的 set_indexdot

df = df.set_index('pokemon')
df = df.dot(df.columns)

pokemon
Vulpix          yes
Nidorino         no
Growlithe    ignore
Krokorok         no
Darumaka     ignore
Klefki           no
Croagunk        yes
dtype: object

上面是一个 Series,用于让 DataFrame 与您的输出相匹配:

df = df.dot(df.columns).to_frame('Val').reset_index()
相关问题