技术协助请求:基于DataFrame数值与占比运算生成新DataFrame
解决方案:基于百分比分配DataFrame列值
步骤说明
- 关联DataFrame:通过
key、key_2、key_3三个匹配列,将df1和df2合并,确保每行的key_3数值对应正确的百分比组。 - 计算分配列:用df1的
key_3分别乘以df2的e1至e4列百分比,得到4个分配后的新列。 - 整理结果:筛选需要的字段,生成最终目标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
相关产品推荐
相关产品推荐

