Python:从条件for循环中打印出结果

时间:2017-07-05 01:39:02

标签: python pandas for-loop dataframe

我有一个简单的问题。我有一个小数据框:

      Column1  Column2  Column3
Row1        0        4        6
Row2        1        3        5
Row3        0        4        2

仅当Column1等于Column2时,我才需要仅打印Column11

      Column1  Column2
Row2        1        3

我有这段代码,我被困在了:

col=[col for col in df.columns if col=="Column1" or col=="Column2"]
print(loc[:,col])

这会打印出结果,以便我们拥有Column1Column2所有值。

      Column1  Column2
Row1        0        4
Row2        1        3
Row3        0        4

如何合并条件Column1==1

谢谢!

3 个答案:

答案 0 :(得分:3)

最简单的两种方法是使用带有布尔索引的.loc和带有列过滤的query

方法1:

df.loc[df.Column1 == 1,['Column1','Column2']]

输出:

      Column1  Column2
Row2        1        3

方法2:

df.query('Column1 == 1')[['Column1','Column2']]

输出:

      Column1  Column2
Row2        1        3

答案 1 :(得分:2)

您可以使用条件索引:

>>> df[df['Column1'] == 1]
      Column1  Column2  Column3
Row2        1        3        5

然后只需选择所需的列:

>>> df[df['Column1'] == 1][['Column1', 'Column2']]
      Column1  Column2
Row2        1        3

答案 2 :(得分:2)

您可以使用python的namedtuple来执行此操作。 Namedtuple创建单独的单个类来表示值。值得记住的是,类只有值而没有方法。

会是这样的:

from collections import namedtuple

Value = namedtuple('Value', ['column', 'line', 'value'])

examples = [Value(column, line, value) for column in range(3)
                                       for line in range(2)
                                       for value in range(2)]

>>> examples
[Value(column=0, line=0, value=0), Value(column=0, line=0, value=1), Value(column=0, line=1, value=0), Value(column=0, line=1, value=1), Value(column=1, line=0, value=0), Value(column=1, line=0, value=1), Value(column=1, line=1, value=0), Value(column=1, line=1, value=1), Value(column=2, line=0, value=0), Value(column=2, line=0, value=1), Value(column=2, line=1, value=0), Value(column=2, line=1, value=1)]

for _ in examples:
  if _.column == 1:
    print('Line: %s' % _.line, 'Value: %s' % _.value)

Line: 0 Value: 0
Line: 0 Value: 1
Line: 1 Value: 0
Line: 1 Value: 1