在python中使用条件迭代列?

时间:2018-01-23 23:48:15

标签: python

使用DataFrame时,有没有办法根据列中的值更改单元格的值?

例如,我有一个检查结果的DataFrame,如下所示:

  answer_is_a answer_is_c
0           a           a
1           b           b
2           c           c

我想将它们编码为正确(1)和不正确(0)。所以它看起来像这样:

  answer_is_a answer_is_c
0           1           0
1           0           0
2           0           1

所以我需要迭代整个DataFrame,将单元格中已有的内容与列标题的最后一个字符进行比较,然后更改单元格值。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

默认情况下,DataFrame.apply会遍历列,将每个列作为一个系列传递给您提供的函数。系列具有name属性,该属性是我们用来提取答案的字符串。

所以你可以这样做:

from io import StringIO
import pandas
data = StringIO("""\
answer_is_a answer_is_c
          a           a
          b           b
          c           c
""")
x = (
    pandas.read_table(data, sep='\s+')
        .apply(lambda col: col == col.name.split('_')[-1])
        .astype(int)
)

x打印出来:

   answer_is_a  answer_is_c
0            1            0
1            0            0
2            0            1