我有一个包含3列的数据框
它有三列,分别是A,B,C
我想寻找特定的字符串说' apple' 列的所有行 A,如果某个特定行包含字符串' apple'我想将其复制到新列 D - 这样对于同一行列D将包含单词' apple'
我尝试使用for循环,如:
for i in range(16):
if df.iat[i,1].str.contains('apple').any():
df.iat[i,2] = 'apple'
但它给了我错误的回答:' str'对象没有属性' str'
我尝试了其他几种方法,但无法弄清楚如何遍历特定的行
答案 0 :(得分:1)
<强>设置强>
df
NAME VALUE
0 apple 6
1 banana 3
2 cherry 7
3 apple 2
4 banana 5
5 cherry 3
<强>解决方案强>
全面检查 -
df.loc[df.eq('apple').any(axis=1), 'NEW'] = 'apple'
或者,对于子字符串检查 -
m = df.select_dtypes(object).apply(
lambda x: x.str.contains('apple')).any(axis=1)
df.loc[m, 'NEW'] = 'apple'
df
NAME VALUE NEW
0 apple 6 apple
1 banana 3 NaN
2 cherry 7 NaN
3 apple 2 apple
4 banana 5 NaN
5 cherry 3 NaN
答案 1 :(得分:0)
与@ coldspeed的答案类似,但有点简单并适用于几个不同的项目:
import pandas as pd
df = pd.DataFrame(
dict(Name=['apple', 'banana', 'cherry', 'apple', 'banana', 'orange'],
Value=[1, 2, 3, 4, 5, 6])
)
m = df.Name.apply(
lambda x: x in ['apple', 'orange']
)
df.loc[m, 'NEW'] = df.loc[m, 'Name']
#df
Name Value NEW
0 apple 1 apple
1 banana 2 NaN
2 cherry 3 NaN
3 apple 4 apple
4 banana 5 NaN
5 orange 6 orange
这种方法也适用于子串:
lambda x: 'app' in x or 'oran' in x