我有一个简单的问题。我有一个小数据框:
Column1 Column2 Column3
Row1 0 4 6
Row2 1 3 5
Row3 0 4 2
仅当Column1
等于Column2
时,我才需要仅打印Column1
和1
:
Column1 Column2
Row2 1 3
我有这段代码,我被困在了:
col=[col for col in df.columns if col=="Column1" or col=="Column2"]
print(loc[:,col])
这会打印出结果,以便我们拥有Column1
和Column2
所有值。
Column1 Column2
Row1 0 4
Row2 1 3
Row3 0 4
如何合并条件Column1==1
?
谢谢!
答案 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