我是熊猫的新人, 对于数据框,如:
N Chem Val
A Sodium 9
B Sodium 10
A Chlorid 7
B Chlorid 10
A Sodium 17
我喜欢在bash中使用grep
,在第一列中选择包含'A'
的行,在第三列中选择'Sodium'
:
A Sodium 9
A Sodium 17
我该怎么办?我想我需要使用df[].str.contains()
?
THX
答案 0 :(得分:4)
您可以在数据框的列上使用.str.contains()
来返回布尔值Series
。您还可以在多个系列上执行逻辑and
和or
操作。最后,将逻辑Series作为键传递给数据帧将仅返回true的值。
bool1 = df.N.str.contains('A') # True for rows of N == 'A'
bool2 = df.Chem.str.contains('Sodium') # True for rows of Chem == 'Sodium'
df[bool1 & bool2] # selects rows where N=='A' AND Chem=='Sodium'
returns (without including the index):
N Chem Val
A Sodium 9
A Sodium 17
答案 1 :(得分:2)
在我看来,使用query
是表达此类命令的最自然方式
df.query('N == "A" & Chem == "Sodium"')
N Chem Val
0 A Sodium 9
4 A Sodium 17
答案 2 :(得分:1)
如果您只想根据两列选择密钥,最好不要使用包含。这是因为你必须从其他字符串中选择sodium_A,sodium_B等(这意味着它可能比基本的多重选择慢)。
import pandas as pd
# Your sample data
df = pd.read_table('sample.txt', header=None, delim_whitespace=True)
print(df[(df.loc[:, 0] == 'A') & (df.loc[:, 1] == 'Sodium')])
0 1 2
1 A Sodium 9
5 A Sodium 17