我已经和Pandas玩了一段时间了,所以我不确定这是否立即可行,让我揭露我的问题:
我有一个数组,例如:
0 |1|2|3|
1 |6|4|3|
2 |6|1|
dtype: object
然后我生成了一个数据帧,以对该数组进行一次热编码:
[[False False False False False]
[False False False False False]
[ False False False False False]]
每行对应于数组行,列与每个数组元素的值不同,用|分隔。
这时,我想根据每个单元格的索引和列为其分配True / False值。 如果列C包含在数组元素A [R]中,则cell(R,C)的值为true
例如 cell(0,1)=真
想要这样做ina。向量化方法,不确定我是否可以创建一个最初为空的数据框,我可能需要对单元格值中的索引和列进行编码?
我使用的是get dummies,但是看一下内部结构,我看到了标签上的迭代,只是想知道它是否可替换(我还必须在稍后应用该类型时对其进行一些自定义,这会导致暂时输出内存)
获取假人
def str_get_boolean_dummies(arr, sep='|'):
arr = arr.fillna('')
try:
arr = sep + arr + sep
except TypeError:
arr = sep + arr.astype(str) + sep
tags = set()
for ts in arr.str.split(sep):
tags.update(ts)
tags = sorted(tags - set([""]))
dummies = pd.np.empty((len(arr), len(tags)), dtype=pd.np.bool)
for i, t in enumerate(tags):
pat = sep + t + sep
dummies[:, i] = map_infer(arr.values, lambda x: pat in x)
答案 0 :(得分:0)
如果我的理解正确,那么您想要str.get_dummies
:
df = pd.DataFrame([['|1|2|3|'], ['|6|4|3|'], ['|6|1|']], columns=['text'])
print(df['text'].str.get_dummies().astype(bool))
输出:
1 2 3 4 6
0 True True True False False
1 False False True True True
2 True False False False True