我有以下Dataframe对象df:
A B C
0 0.0 5.0 0.0
1 0.0 6.0 0.0
2 0.0 9.0 0.0
3 0.0 0.0 0.0
4 0.0 2.0 0.0
5 0.0 5.0 0.0
6 6.0 0.0 0.0
7 0.0 0.0 0.0
8 0.0 1.0 0.0
我要更改“ B”列的值:
如果该值小于3,则该值应替换为'False'。
否则,该值应替换为“ True”。
我尝试过:
df['B'] = df['B'].apply(lambda x: [False if y < 3 else True for y in x])
在这种情况下,我得到TypeError:“ float”对象不可迭代。
当我将其用于整个数据框时,它仍然可以工作:
df = df.apply(lambda x: [False if y < 3 else True for y in x])
任何帮助将不胜感激。
答案 0 :(得分:2)
使用直接比较或将ge
用作:
df['B'] = df['B']>=3
OR
df['B'] = df['B'].ge(3)
print(df)
A B C
0 0.0 True 0.0
1 0.0 True 0.0
2 0.0 True 0.0
3 0.0 False 0.0
4 0.0 False 0.0
5 0.0 True 0.0
6 6.0 False 0.0
7 0.0 False 0.0
8 0.0 False 0.0
答案 1 :(得分:1)
简单地为:
>>> import pandas as pd
>>> df = pd.DataFrame([1,2,3,4], columns=["data"])
>>> df["B"] = df["data"] > 2
>>> df
data B
0 1 False
1 2 False
2 3 True
3 4 True
>>>
您甚至可以使用numpy进行条件比较,如下所示:
>>> import pandas as pd
>>> import numpy as np
>>> df = pd.DataFrame([1,2,3,4], columns=["A"])
>>> df["B"] = np.where(df["A"] <2, "False", "True")
>>> df
A B
0 1 False
1 2 True
2 3 True
3 4 True
答案 2 :(得分:1)
下面的代码可能会帮助您使用方法,当apply方法在列中使用时,它将获取该列的所有值,因此我不认为在这里使用for循环
df['b'] = df['b'].apply(lambda x: True if x>3 else False)
答案 3 :(得分:0)
df.loc[df.B > 3, 'new'] = True
df.loc[df.B < 3,'new'] = False
df = df.drop("B", axis=1)
df = df.rename(columns={"new": "B"})