获取中条件匹配的列名

2024-04-19 11:49:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个pandas数据帧,看起来像这样:

        A     B     C     D     E     F     G     H     I
1       0.0   1.0   0.0   0.0   0.0   0.0   0.0   0.0   0.0
2       1.0   0.0   0.0   0.0   0.0   0.0   0.0   0.0   0.0
3       0.0   1.0   0.0   0.0   0.0   0.0   0.0   0.0   0.0

现在,对于每个row,我必须检查哪个column包含1,然后在一个新列中记录这个列名。最后的dataframe看起来是这样的:

        A     B     C     D     E     F     G     H     I     IsTrue
1       0.0   1.0   0.0   0.0   0.0   0.0   0.0   0.0   0.0   B
2       1.0   0.0   0.0   0.0   0.0   0.0   0.0   0.0   0.0   A
3       0.0   1.0   0.0   0.0   0.0   0.0   0.0   0.0   0.0   B

有没有更快捷的方法


Tags: 数据方法dataframepandas记录columnrowistrue
2条回答

这里有一种使用^{}的方法:

df['isTrue'] = df.astype(bool).dot(df.columns)

    A    B    C    D    E    F    G    H    I    isTrue
1  0.0  1.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0      B
2  1.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0      A
3  0.0  1.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0      B

为了获得更好的性能,您可以使用:

df['isTrue'] = df.columns[df.to_numpy().argmax(1)]

你所描述的是^{}的定义

>>> df.idxmax(1)
1    B
2    A
3    B
dtype: object

相关问题 更多 >