我以这个数据框为例:
import pandas as pd
df = pd.DataFrame({'country':['china','canda','usa' ], 'value':[1000, 850, 1100], 'fact':[1000,200,850]})
df.index=df['country']
df = df.drop('country', axis=1)
我想遍历每个国家的GDP,并希望在此迭代中创建一个新列,该列根据条件的条件充满1或0:
for x in df['value']:
if x > 900:
df['answer']=1
else:
df['answer']=0
我希望一列具有以下值:
[1,0,1]
因为加拿大的价值低于900。
但是相反,我有一列充满了。
怎么了?
答案 0 :(得分:1)
甚至无需使用以下命令就可以遍历每一行:
df['answer'] = df['value'].apply(lambda value: 1 if value > 900 else 0)
编辑,您正在为df['answer']
分配一些值。最后一个值是 1 ,这就是为什么将 1 应用于整个 answer 列而不是特定行的原因。
答案 1 :(得分:1)
使用np.where
df["answer"] = np.where(df["value"]> 900, 1,0)
或
df["answer"] = (df["value"]> 900).astype(int)
输出:
value fact answer
country
china 1000 1000 1
canda 850 200 0
usa 1100 850 1
您的代码有什么问题
执行df['answer']=1
时,表达式将answer
列中的所有行分配1。
因此最后一个评估值分配给该列