gpt4 book ai didi

python - 检查字符串在多列中的存在,并将输出输出到 pandas 中的单独列

转载 作者:太空宇宙 更新时间:2023-11-03 10:50:13 25 4
gpt4 key购买 nike

我有如下数据框:

    col1  col2  col3  col4
0 a-I - - 12.4
1 - a-I - 2.6
2 a-I - a-I 23
3 - a-I a-I 4
4 - - a-I 5
5 a-I a-I - 6.245
6 - a a 7.23
7 a a - 8

我想要的是检查每列中的 I 是否存在,而不是使用 - 拆分字符串来创建 res 列。谁能知道如何做到这一点?

预期的结果是这样的:

    col1  col2  col3  col4 res
0 a-I - - 12.4 I
1 - a-I - 2.6 I
2 a-I - a-I 23 I
3 - a-I a-I 4 I
4 - - a-I 5 I
5 a-I a-I - 6.245 I
6 - a a 7.23 -
7 a a - 8 -

最佳答案

设置

如果您的 DataFrame 中除了 str 之外还有其他数据类型,您需要将所有提及的 df 替换为 df.astype(str).

使用 numpy.wherestr.contains

df.assign(res=np.where(df.sum(1).str.contains('I'), 'I', '-'))

使用列表理解:

列表理解通常比内置的 pandas 字符串方法更快:

df.assign(res=['I' if 'I' in row else '-' for row in df.values.sum(1)])

两者都产生:

 col1 col2 col3 res
0 a-I - - I
1 - a-I - I
2 a-I - a-I I
3 - a-I a-I I
4 - - a-I I
5 a-I a-I - I
6 - a a -
7 a a - -

时间

df = pd.concat([df]*5000)

%timeit ['I' if 'I' in row else '-' for row in df.values.sum(1)]
9.29 ms ± 310 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

%timeit np.where(df.sum(1).str.contains('I'), 'I', '-')
69.4 ms ± 2.17 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

%timeit df.sum(1).str.contains('I').map({False:'-',True:'I'})
83 ms ± 12.5 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

关于python - 检查字符串在多列中的存在,并将输出输出到 pandas 中的单独列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52093315/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com