我想在C列中设置一个字符串,而B列中的值是> = 2(如果> =是真,则为是,如果> =为假,则为否)。输出应如下:
A B C
1 A 2 'yes'
2 B 3 'yes'
3 C 4 'yes'
4 D 5 'yes'
5 A 6 'yes'
6 B 7 'yes'
7 C 0 'no'
8 D 1 'no'
9 A 2 'yes'
10 B 3 'yes'
11 C 4 'yes'
12 D 0 'no'
到目前为止,我已经尝试实现嵌套循环,这太慢了:
i= 0
for row in range(0, len(df)-1):
if df['B'][i] >= 2:
if df['B'][i] >= 2:
df['C'][i] = 'yes'
elif df['B'][i] >= 2:
df['C'][i] = 'yes'
答案 0 :(得分:2)
像这样的东西
df['C'] = 'no'
df['C'][df['B'] >= 2] = 'yes'
答案 1 :(得分:1)
这可以通过在B列上使用“apply”以及lambda函数和三元“if”来完成:
import pandas as pd
df = pd.DataFrame.from_dict({'A': ['A', 'B', 'C'], 'B': [1, 2, 3]})
df['C'] = df['B'].apply(lambda r: "yes" if r >= 2 else "no")
应用于DataFrame列的“apply”将允许您将函数应用于数据框中的每个值。因此,我们测试每个值是否>> 2,如果是,则返回“是”,否则返回“否”。
答案 2 :(得分:1)
您可以使用np.where
df['C'] = np.where(df.B>=2, 'yes', 'no')
A B C
1 A 2 yes
2 B 3 yes
3 C 4 yes
4 D 5 yes
5 A 6 yes
6 B 7 yes
7 C 0 no
8 D 1 no
9 A 2 yes
10 B 3 yes
11 C 4 yes
12 D 0 no
答案 3 :(得分:1)
这也可以通过创建布尔值列C' C'根据你的条件:
pytest=2.9.0
但如果你只想要'是'和'不'然后,您可以将布尔值列转换为字符串并应用替换函数。
df['C'] = df['B'] >= 2