фильтровать фрейм данных на основе условия, примененного к списку - PullRequest
1 голос
/ 12 июля 2020

У меня есть следующий df, и я хочу создать оператор if для печати только определенных c строк.

pandas_dataframe = pd.DataFrame({'actors' : [['Tom Hanks', 'Tim Allen', 'Don Rickles', 'Jim Varney'],
                                             ['Robin Williams', 'Jonathan Hyde', 'Kirsten Dunst'],
                                             ['Walter Matthau', 'Jack Lemmon', 'Sophia Loren', 'n', 'ix']],
                                 'movie':['Toy Story', 'Jumanji', 'X-men']})

Я хочу напечатать только строку, в которой в списке участников есть актер с длина 1, поэтому я хочу напечатать только третью строку, потому что в ней есть как минимум 1 актер длиной 1.

+--------------------------------------------------------------+------+
| actors                                                       |movie |
+--------------------------------------------------------------+------
|['Walter Matthau', 'Jack Lemmon', 'Sophia Loren', 'n', 'ix']  | X-men|
+--------------------------------------------------------------+------+

Ответы [ 3 ]

2 голосов
/ 12 июля 2020

Попробуйте:

import numpy as np

mask=pandas_dataframe.actors.explode().str.len().eq(1)
res=pandas_dataframe.loc[np.unique(mask.loc[mask].index)]

Вывод:

                                              actors  movie
2  [Walter Matthau, Jack Lemmon, Sophia Loren, n,...  X-men
0 голосов
/ 12 июля 2020

Вы можете использовать приведенный ниже код, где отфильтруйте Dataframe в одной строке.

df[df.actors.apply(lambda o: any([len(x)==1 for x in o]))]
0 голосов
/ 12 июля 2020

Используйте лямбда-функцию и примените:

import pandas as pd

df = pd.DataFrame(
    {
        "actors": [
            ["Tom Hanks", "Tim Allen", "Don Rickles", "Jim Varney"],
            ["Robin Williams", "Jonathan Hyde", "Kirsten Dunst"],
            ["Walter Matthau", "Jack Lemmon", "Sophia Loren", "n", "ix"],
        ],
        "movie": ["Toy Story", "Jumanji", "X-men"],
    }
)

filt = df.actors.apply(lambda x: any(len(y) == 1 for y in x))
df = df[filt]
print(df)

Возврат:

                                              actors   movie
2  [Walter Matthau, Jack Lemmon, Sophia Loren, n, ix]  X-men
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...