我有两个相同尺寸的数据框,如下所示:
df1
ID flag
0 1
1 0
2 1
df2
ID flag
0 0
1 1
2 0
在两个数据帧中,我想创建一个表示附加标志的新变量。所以新变量将如下所示:
df1
ID flag new_flag
0 1 1
1 0 1
2 1 1
df2
ID flag new_flag
0 0 1
1 1 1
2 0 1
因此,如果任一标志列为1
,则新标志将为1
。
我试过这段代码:
df1['new_flag']= 1
df2['new_flag']= 1
df1['new_flag'][(df1['flag']==0)&(df1['flag']==0)]=0
df2['new_flag'][(df2['flag']==0)&(df2['flag']==0)]=0
我希望1
中new_flag
的{{1}}数量相同但不同。这是因为我不是一行一行吗?喜欢这个问题?
pandas create new column based on values from other columns
如果是这样,我如何包含两个datafrmes的标准?
答案 0 :(得分:2)
如果我们将np.logical_or
设置为除最后一行之外的所有0,则可以使用df1
来实现此目的,因此我们不只是获得1
列,我们可以使用np.logical_or
转换astype(int)
的结果,将布尔数组转换为1
和0
:
In [108]:
df1['new_flag'] = np.logical_or(df1['flag'], df2['flag']).astype(int)
df2['new_flag'] = np.logical_or(df1['flag'], df2['flag']).astype(int)
df1
Out[108]:
ID flag new_flag
0 0 0 0
1 1 0 1
2 2 1 1
In [109]:
df2
Out[109]:
ID flag new_flag
0 0 0 0
1 1 1 1
2 2 0 1