Создайте таблицу, показывающую, содержится ли список в сгруппированных столбцах кадра данных. - PullRequest
4 голосов
/ 01 мая 2020

с учетом следующих данных:

data = pd.DataFrame(
    dict(
        source=["file1", "file1", "file2", "file2"],
        variable=["shipp", "carrr", "shipp", "bikee"],
    )
)
vals = pd.Series(["ship", "bike"])

Что выглядит как:

  source variable
0  file1    shipp
1  file1    carrr
2  file2    shipp
3  file2    bikee

Я хочу создать следующее:

          ship     bike
file1     True     False
file2     True     True

Я не конечно, как об этом go, я попробовал кое-что из следующего:

data.groupby("source").apply(
    lambda grp: pd.Series([any(grp["variable"].str.contains(v)) for v in vals])
)

Это заняло у меня несколько раз, и теперь мне интересно, есть ли более хороший подход.

(Любая помощь в написании лучшего названия приветствуется)

1 Ответ

4 голосов
/ 01 мая 2020

IIU C мы делаем extract тогда pd.crosstab

data['new']=data.variable.str.extract('('+'|'.join(vals)+')')[0]
s=pd.crosstab(data.source,data.new).astype(bool)
new      bike  ship
source             
file1   False  True
file2    True  True
...