我有一個有兩列字符串的熊貓數據框。我想識別第一列(s1
)中字符串出現在第二列(s2
)字符串中的所有行。使用正則表達式在熊貓中查找另一列中的值
所以,如果我的專欄是:
abc abcd*ef_gh
z1y xxyyzz
我想保持第一行,而不是第二。
我能想到的唯一辦法是:
- 迭代通過數據幀行
- 使用
s1
內容作爲匹配模式
適用df.str.contains()
到s2
有什麼辦法要做到這一點,不需要遍歷行?
我有一個有兩列字符串的熊貓數據框。我想識別第一列(s1
)中字符串出現在第二列(s2
)字符串中的所有行。使用正則表達式在熊貓中查找另一列中的值
所以,如果我的專欄是:
abc abcd*ef_gh
z1y xxyyzz
我想保持第一行,而不是第二。
我能想到的唯一辦法是:
s1
內容作爲匹配模式適用df.str.contains()
到s2
有什麼辦法要做到這一點,不需要遍歷行?
我能想出的最好的方法是使用apply
代替手工迭代:
>> df = pd.DataFrame({'x': ['abc', 'xyz'], 'y': ['1234', '12xyz34']})
>> df
x y
0 abc 1234
1 xyz 12xyz34
>> df.x[df.apply(lambda row: row.y.find(row.x) != -1, axis=1)]
1 xyz
Name: x, dtype: object
這可能是可行的(僅適用於簡單的匹配),在向量化的方式,與numpy的chararray methods:
In [326]:
print df
s1 s2
0 abc abcd*ef_gh
1 z1y xxyyzz
2 aaa aaabbbsss
In [327]:
print df.ix[np.char.find(df.s2.values.astype(str),
df.s1.values.astype(str))>=0,
's1']
0 abc
2 aaa
Name: s1, dtype: object
我不認爲你可以在這個時候以矢量化的方式做到這一點 – EdChum
@EdChum,不完全可以使用'numpy.char.find()'進行簡單的匹配,如果沒有're'參與其中。 –
如果你有一個非常大的數據集,你可以看看[Dask](http://dask.pydata.org/en/latest/)。 –