【发布时间】:2021-02-20 15:23:28
【问题描述】:
我有一个数据框,想根据一个条件创建一个列,该条件用另一列中的一行的值填充该行。
df = pd.DataFrame({'parent':[32, 3, 88, 9, 10, 23, 99, 23],
'id':[1, 2, 3, 4, 5, 6, 7, 8],
'flag':[True,True,False,True,False,True,True,True]})
我尝试使用 np.where() 来执行此操作,但它不会逐行更新值,而是用满足的条件替换列中的所有值。
df['res'] = np.where(df['flag'] == True, df['parent'], df['id'])
我要创建的数据框如下所示:
df = pd.DataFrame({'parent':[32, 3, 88, 9, 10, 23, 99, 23],
'id':[1, 2, 3, 4, 5, 6, 7, 8],
'flag':[True,True,False,True,False,True,True,True],
'res':[32, 3, 3, 9, 5, 23, 99, 23]})
任何想法我做错了什么?我是 python 新手,非常感谢任何帮助。
【问题讨论】:
-
您的命令中似乎有错字。将
output更改为df。 -
您的代码有另一个错字。第一段代码中的“标志”属性在第一个位置有一个 False...但在最后一段代码的第一个位置有一个 True。
-
感谢您指出这些。我做了修复。很抱歉,
-
另请注意,您可以简单地执行
np.where(df['flag'], df['parent'], df['id'])而无需指定df["flag"]==True。