基于条件语句的多DataFrame除法运算实现需求
条件除法运算实现方案
已知数据
三个DataFrame的结构与数据如下(已将date设为索引):
import pandas as pd df1 = pd.DataFrame({ 'date': ['2022-08-17 00:00:00', '2022-08-17 01:00:00', '2022-08-17 02:00:00', '2022-08-17 03:00:00'], 'col1': [50, 100, 180, -80], 'col2': [30, -20, 10, -66], 'col3': [-40, 70, -80, 20] }).set_index('date') df2 = pd.DataFrame({ 'date': ['2022-08-17 00:00:00', '2022-08-17 01:00:00', '2022-08-17 02:00:00', '2022-08-17 03:00:00'], 'col1': [50, 10, 70, 20], 'col2': [33, 87, 90, 12], 'col3': [90, 40, 30, 10] }).set_index('date') df3 = pd.DataFrame({ 'date': ['2022-08-17 00:00:00', '2022-08-17 01:00:00', '2022-08-17 02:00:00', '2022-08-17 03:00:00'], 'col1': [-50, -120, -160, -40], 'col2': [-15, -20, -5, -60], 'col3': [-40, -70, -80, -20] }).set_index('date')
运算规则
针对df1的每个元素,执行以下条件除法:
- 若元素大于0:结果为
df1元素 / df2对应位置元素 - 若元素小于0:结果为
(-1 * df1元素) / df3对应位置元素
实现代码
使用numpy.where实现元素级的条件判断与运算,代码简洁高效:
import numpy as np # 提取数值列(避免索引参与运算) numeric_cols = df1.columns # 执行条件运算并生成结果DataFrame result_df = pd.DataFrame( np.where(df1[numeric_cols] > 0, df1[numeric_cols] / df2[numeric_cols], (-df1[numeric_cols]) / df3[numeric_cols]), index=df1.index, columns=numeric_cols )
最终结果
运行代码后得到的结果如下:
col1 col2 col3 date 2022-08-17 00:00:00 1.0 0.909091 -1.00000 2022-08-17 01:00:00 10.0 -1.000000 1.75000 2022-08-17 02:00:00 2.571429 0.111111 -1.00000 2022-08-17 03:00:00 2.0 -1.100000 2.00000
内容的提问来源于stack exchange,提问作者Denver Dang
相关产品推荐
相关产品推荐

