首页 > 解决方案 > 将 0/1 应用于布尔逻辑

问题描述

我有如下数据集,CURRENT YEAR 数据集:

资产收益率 借款
2020 1.2 23681

上一年数据集:

资产收益率 借款
2019 2.3 24682

所以 2 个不同年份的数据集。我不想合并数据集。

我正在检查布尔逻辑,如下所示,

for key6, data6 in bank.items():   
 cy = data6[data6['index']=='2020']
py = data6[data6['index']=='2019']

ROA_FS = cy['ROA'].apply(lambda x:1 if x>0 else 0)
CFO_FS = cy['CashfromOperatingActivity'].apply(lambda x:1 if x>0 else 0)
C_ROA_FS = (cy['ROA']>py['ROA']).apply(lambda x:1 if x==True else 0)

for 循环中的前两行完美运行,因为它的输出是整数。但是第三行我比较了两个不同的df,之后我转换为ROA列的整数和浮点数,如下所示,

 (int(cy['ROA'])>int(py['ROA'])).apply(lambda x: 1 if x=='True' else 0)

当我应用它说以下错误,

'bool' object has no attribute 'apply'

请注意,我正在比较不同年份的不同 ROA

预期输出,change_in_ROA = a['ROA']>b['ROA'],如果为真,则打印 1,否则为 0。因此输出应为 0/1。

谢谢

标签: pythonpandas

解决方案


如果两个 DataFrame 之间的行数相同,则使用:

a['new'] = np.where(a['ROA'].astype(int) > b['ROA'].astype(int), 1, 0)

如果不需要相同的行,首先将 DataFrames 连接在一起,例如按列col(取决于数据和需要什么),然后测试:

df = a.merge(b, on='col')

df['new'] = np.where(df['ROA'].astype(int) > df['ROA'].astype(int), 1, 0)

推荐阅读