创建一个表,显示数据框的分组列中是否包含列表。

问题描述 投票:1回答:1

给出以下数据。

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

我不知道该怎么做, 我试过以下的方法:

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

我花了好几次时间,现在我想知道是否有更好的方法。

(欢迎大家帮忙写一个更好的标题)

python pandas pandas-groupby data-manipulation
1个回答
4
投票

我们做 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
© www.soinside.com 2019 - 2024. All rights reserved.