python - 将 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。
谢谢
解决方案
如果两个 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)
推荐阅读
- excel - Excel/VBA 代码忽略输入的参数
- javascript - 如何从所选元素的属性值中获取对象
- ruby - selenium 页面元素的方法名称和变量之间的名称冲突
- node.js - 使用 Puppeteer 从 localStorage 获取所有值
- java - 如何使用 Jackson 反序列化外部 Lombok 构建器类
- arrays - JQ如何将数组中的多个对象合并为一个
- postgresql - go-pg:将 postgresql 复合类型行的数组解析为 golang 结构切片
- r - R将数据文件从ftp导入数据框
- java - Java JTable 一次将单个单元格保存到数据库
- zip - 如何使用 Python 压缩和解压缩不适合内存的文件