python - 在 pandas 数据框列中拆分元组中的字符串

标签 python pandas vectorization

我有一个 pandas 数据框,其中一列包含元组:

p = pd.DataFrame({"sentence" : [("A.Hi",   "B.My",   "C.Friend"), \
                                ("AA.How", "BB.Are", "CC.You")]})

我想按标点符号 拆分元组中的每个字符串。,获取拆分/字符串的第二部分并查看有多少个匹配的字符串列表:

p["tmp"] = p["sentence"].apply(lambda x: [i.split(".")[1] for i in x])
p["tmp"].apply(lambda x: [True if len(set(x).intersection(set(["Hi", "My"])))>0 else False])

这按预期工作,但我的数据框有超过 100k 行 - 并且 apply 在这些大小下似乎效率不高。有没有办法优化/矢量化上述代码?

最佳答案

使用嵌套列表和集合理解并进行测试,将集合转换为 bools - 空 set 返回 False:

s = set(["Hi", "My"])
p["tmp"] = [bool(set(i.split(".")[1] for i in x).intersection(s)) for x in p["sentence"]]

print (p)
                   sentence    tmp
0    (A.Hi, B.My, C.Friend)   True
1  (AA.How, BB.Are, CC.You)  False

编辑:

如果分割后只有1或2个长度值,可以通过索引[-1]来选择最后一个值:

p = pd.DataFrame({"sentence" : [("A.Hi",   "B.My",   "C.Friend"), \
                                ("AA.How", "BB.Are", "You")]})

print (p)
                 sentence
0  (A.Hi, B.My, C.Friend)
1   (AA.How, BB.Are, You)

s = set(["Hi", "My"])

p["tmp"] = [bool(set(i.split(".")[-1] for i in x).intersection(s)) for x in p["sentence"]]
print (p)
                 sentence    tmp
0  (A.Hi, B.My, C.Friend)   True
1   (AA.How, BB.Are, You)  False

关于python - 在 pandas 数据框列中拆分元组中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54323988/

相关文章:

Python 函数混淆

python - 求不同年份同一日期的平均值

python - 当 Pandas 在多个带有颜色标签的子图中创建散点图时无法设置 xlabel

python - 对 numpy 数组中的对象应用方法并进行向量化会导致空数组

python - 计算一定距离内的位置数量

python - 将二进制数据加密为二进制数据并解密

python - 循环每个元素并根据该元素打印 word2vec 向量

python - 对于每个 A(key) | 选择列值大于 x 的第一个匹配项 |数据框

arrays - 对图像进行积分的有效方法

python - 使用 2x2 矩阵广播 2D 点列表的点积