You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

技术协助请求:基于DataFrame数值与占比运算生成新DataFrame

解决方案:基于百分比分配DataFrame列值

步骤说明

  1. 关联DataFrame:通过key、key_2、key_3三个匹配列,将df1和df2合并,确保每行的key_3数值对应正确的百分比组。
  2. 计算分配列:用df1的key_3分别乘以df2的e1至e4列百分比,得到4个分配后的新列。
  3. 整理结果:筛选需要的字段,生成最终目标DataFrame。

代码示例

import pandas as pd

# 替换为你的实际数据
df1 = pd.DataFrame({
    'key': ['A', 'B', 'C'],
    'key_2': ['X', 'Y', 'Z'],
    'key_3': [100, 200, 300]
})

df2 = pd.DataFrame({
    'key': ['A', 'B', 'C'],
    'key_2': ['X', 'Y', 'Z'],
    'key_3': [100, 200, 300],
    'e1': [0.2, 0.3, 0.1],
    'e2': [0.3, 0.2, 0.4],
    'e3': [0.4, 0.3, 0.3],
    'e4': [0.1, 0.2, 0.2]
})

# 合并两个DataFrame
merged_df = pd.merge(df1, df2, on=['key', 'key_2', 'key_3'])

# 计算分配后的列值
merged_df['allocated_e1'] = merged_df['key_3'] * merged_df['e1']
merged_df['allocated_e2'] = merged_df['key_3'] * merged_df['e2']
merged_df['allocated_e3'] = merged_df['key_3'] * merged_df['e3']
merged_df['allocated_e4'] = merged_df['key_3'] * merged_df['e4']

# 提取最终结果
result_df = merged_df[['key', 'key_2', 'key_3', 'allocated_e1', 'allocated_e2', 'allocated_e3', 'allocated_e4']]

print(result_df)

补充处理

  • 若df2中百分比是带%的字符串格式,需先转换为数值:
    df2[['e1','e2','e3','e4']] = df2[['e1','e2','e3','e4']].replace('%','', regex=True).astype(float)/100
    
  • 若两表存在匹配不上的行,可调整merge的how参数(如how='left'保留df1所有行)

内容的提问来源于stack exchange,提问作者MinatoDBO

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 06:30:53