gpt4 book ai didi

python - 使用 df.apply 和 str.contains ('value' , case =False)

转载 作者:太空宇宙 更新时间:2023-11-04 05:32:08 27 4
gpt4 key购买 nike

数据:

A     |    B   |    C    
========================
Value | Fred | 0
foo | Jim | 1
Value | Bob | 2

我写了一个方法:

def is_value(df):
if df['A'].str.contains('value', case=False):
b='X'
return b

我称之为:

df['B'] = df.apply(is_value, axis=1)

并得到以下错误:

AttributeError: ("'str' object has no attribute 'str'", 'occurred at index 0')

申请中允许这样做吗?

它适用于这个成语:

df = df.loc[df['A'].str.contains('Value', case=False) & df['C'] !=0]
df['A'] = 'X'

有没有更好的办法?

最佳答案

我觉得最好不要用apply如果没有必要,因为显然它更慢。

我想你可以使用 mask :

print df['A'].str.contains('value', case=False)
0 True
1 False
2 True
Name: A, dtype: bool

df['B'] = df.mask(df['A'].str.contains('value', case=False), 'X')
print df
A B C
0 Value X 0
1 foo Jim 1
2 Value X 2

另一种解决方案 loc :

df.loc[ df['A'].str.contains('value', case=False), 'B'] = 'X'
print df
A B C
0 Value X 0
1 foo Jim 1
2 Value X 2

编辑:

看来您需要在 C 列中添加不等于 0 的过滤值:

print (df['A'].str.contains('value', case=False)) & (df['C'] !=0)
0 False
1 False
2 True
dtype: bool

df['B'] = df.mask((df['A'].str.contains('value', case=False)) & (df['C'] !=0), 'X')
print df
A B C
0 Value Value 0
1 foo foo 1
2 Value X 2


df.loc[(df['A'].str.contains('value', case=False)) & (df['C'] !=0) , 'B'] = 'X'
print df
A B C
0 Value Value 0
1 foo foo 1
2 Value X 2

关于python - 使用 df.apply 和 str.contains ('value' , case =False),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36841631/

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