我有一个DataFrame,如所附图像所示。我感兴趣的列是fgr和fgr1。正如您所看到的,它们都包含与年份相对应的值。
我想在这两列中迭代,对于存在的任何值,如果存在值,我想要1,否则0。
例如,在fgr中,第一个值是2028。因此,列2028中的第一行将具有值1,并且所有其他列具有值0。
我尝试使用查找,但没有成功。因此,任何指针都会非常有用。
示例数据帧
数据:Excel 中的数据文件
这个填充可以帮你完成任务。你也可以使用for循环,但我认为这种方法会更快。
df["Matched"]=df["fgr"].isin(df["fgr1"](*1
基本上,您检查一个列中的值是否在另一列中,如果是,则得到True或False。然后乘以1得到1和0,而不是True或False。
根据这个答案
不是最有效的,但应该适用于您的情况(如果大型数据集则耗时(
s = df.reset_index().melt(['index','fgr','fgr1'])
s['value'] = s.variable.eq(s.fgr.str[:4]).astype(int)
s['value2'] = s.variable.eq(s.fgr1.str[:4]).astype(int)
s['final'] = np.where(s['value']+s['value2'] > 0,1,0)
yourdf = s.pivot_table(index=['index','fgr','fgr1'],columns = 'variable',values='final',aggfunc='first').reset_index(level=[1,2])
yourdf