给出以下数据。
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])
)
我花了好几次时间,现在我想知道是否有更好的方法。
(欢迎大家帮忙写一个更好的标题)
我们做 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