2017-05-22 2 views
0

J'ai un dataframe appelé data, qui ressemble à ceci:tranche une trame de données basée sur une colonne en commençant par la valeur d'une autre colonne

|...|category|...|ngram|...|

J'ai besoin de trancher ce dataframe aux cas où category démarre avec la valeur ngram. Ainsi, par exemple, si je devais l'exemple suivant:

  • Catégorie: Lits
  • ngram: lit

alors cette instance devrait être abandonné du dataframe résultant.

Dans T-SQL, j'utilise la requête suivante (qui peut ne pas être la meilleure façon, mais il fonctionne):

SELECT 
    * 
FROM mytable 
WHERE category NOT LIKE ngram+'%'; 

J'ai lu sur ce un peu, et ma meilleure tentative est la suivante:

data[data.category.str.startswith(data.ngram.str) == True] 

Mais cela ne renvoie aucune ligne, ni ne l'inverse (en utilisant == True)

Répondre

0
#use df.apply to filter the rows with category starts with ngram. 
data[data.apply(lambda x: x.category.startswith(x.ngram), axis=1)] 
+0

Hey, merci fonctionne parfaitement. Le code final que j'ai utilisé avait une conversion de chaîne, et une inversion: 'data [~ (data.apply (lambda x: str (x.catégorie) .lower(). Startswith (str (x.ngram) .lower()) , axe = 1))] ' – smj