如何在Python中使用Pandas按顺序拆分两个DataFrame并实现基数与系数的依次除法运算
解决Pandas迭代拆分基数的问题
没问题,我来帮你搞定这个需求。从你给出的结果来看,你需要的是迭代式地将初始基数依次除以DataFrame1中的系数——也就是用上一步的拆分结果继续除以下一个系数,而不是一次性做广播除法对吧?下面是具体的实现步骤和代码:
步骤1:创建并预处理DataFrame
首先我们需要把两个DataFrame创建出来,同时把日期列转为datetime类型,并确保DataFrame1的顺序是按日期从新到旧(和你需要的处理顺序一致):
import pandas as pd # 构建DataFrame1:日期和系数 df1 = pd.DataFrame({ 'date': ['2020-10-14', '2019-08-06', '2017-09-05'], 'coefficient': [4.0, 8.0, 8.0] }) # 转换日期格式并按降序排序,保证处理顺序正确 df1['date'] = pd.to_datetime(df1['date']) df1 = df1.sort_values('date', ascending=False).reset_index(drop=True) # 构建DataFrame2:初始基数 df2 = pd.DataFrame({ 'date': ['2020-12-30'], 'bases': [6498927] })
步骤2:迭代计算拆分基数
接下来我们取出初始基数,然后依次除以每个系数,记录每次的结果:
# 获取初始基数数值 current_base = df2['bases'].iloc[0] # 存储每次拆分后的结果 split_results = [] # 遍历df1中的系数,迭代计算 for coef in df1['coefficient']: current_base = current_base / coef # 按照你给出的结果截断小数部分(如果需要四舍五入可以用round()) split_results.append(int(current_base)) # 将结果合并到df1中,生成新的"split_base"列 df1['split_base'] = split_results
步骤3:查看最终结果
执行完上面的代码后,你可以通过以下代码查看结果:
print(df1[['date', 'split_base']])
输出结果会和你期望的完全一致:
date split_base 0 2020-10-14 1624731 1 2019-08-06 203091 2 2017-09-05 25386
补充说明
- 如果你的DataFrame1本来就是按日期降序排列的,那
sort_values这一步可以省略; - 如果你需要对拆分结果做四舍五入而不是截断小数,只需要把
int(current_base)替换成round(current_base)即可。
内容的提问来源于stack exchange,提问作者tensei
相关产品推荐
相关产品推荐

