我以这个数据框为例:
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。
但是我有一栏充满了。
出了什么问题?
最佳答案
使用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
时,表达式会将 1 分配给 answer
列中的所有行。
因此最后评估的值被分配给该列
关于python - 迭代数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59134053/