熊猫以向量化方式从单元格获取索引和列

时间:2019-05-23 10:41:59

标签: python pandas dataframe vectorization

我已经和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)

1 个答案:

答案 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