让我们来看看这个小数据框。
df = pd.DataFrame(dict(Name=['abc','abcd','bc']))
Name
0 abc
1 abcd
2 bc
我想创建一个新的数据框: - 它的索引和列名等于列名的值 - 如果索引属于列名,其值等于true或false。
预期的输出。
abc abcd bc
abc True True False
abcd False True False
bc True True True
请问我应该怎么做?
使用 Series.str.contains
在列表理解中,创建面具,并通过以下方式连接在一起 concat
,然后设置索引,转置 DataFrame.T
和最后删除索引和列名的方法 DataFrame.rename_axis
:
s = df['Name']
L = [s.str.contains(x) for x in s]
df = pd.concat(L, axis=1, keys=s).set_index(s).T.rename_axis(index=None, columns=None)
print (df)
abc abcd bc
abc True True False
abcd False True False
bc True True True