我很感激你的帮助。我有一个熊猫数据帧。我想使用正则表达式搜索数据框的3列,然后返回符合搜索条件的所有行,按我的列之一排序。我想把它写成一个函数,所以如果可能的话我可以用其他标准来实现这个逻辑,但我不太清楚如何做到这一点。
例如,我知道如何拉取搜索结果(col1是列名):
idx1 = df.col1.str.contains(r'vhigh|high', flags=re.IGNORECASE, regex=True, na=False)
print df[~idx1]
但我无法弄清楚如何采取这种类型的操作,并使用多个列执行它然后排序。有人有任何提示吗?
答案 0 :(得分:2)
您可以使用apply
使代码更简洁。例如,给定此DataFrame:
df = pd.DataFrame({'col1': ['vhigh', 'low', 'vlow'], 'col2': ['eee', 'low', 'high'], 'val': [100,200,300]})
print df
输入:
col1 col2 val
0 vhigh eee 100
1 low low 200
2 vlow high 300
您可以选择列vhigh
或high
中包含字符串col1
或col2
的所有行,如下所示:
mask = df[['col1', 'col2']].apply(lambda x: x.str.contains('vhigh|high', regex=True)).any(axis=1)
print df[mask]
apply
函数在每列上应用contains
函数(默认情况下为axis=0
)。 any
函数返回一个布尔掩码,元素为True表示至少有一列符合搜索条件。然后,可以使用它在原始DataFrame上执行选择。
输出:
col1 col2 val
0 vhigh eee 100
2 vlow high 300
然后,按列对结果进行排序,例如val
列,你可以这样做:
df[mask].sort('val')