如何基于国家类别将DataFrame的Volume列与对应乘数相乘?
解决方案
你可以通过两种常用的Pandas方法实现需求:
方法1:使用merge合并匹配(直观易维护)
先将两个DataFrame按Country列合并,把对应国家的乘数关联到DataFrame A的每一行,再计算调整后的Volume值。
示例代码
import pandas as pd # 初始化你的两个DataFrame df_a = pd.DataFrame({ 'Country': ['USA', 'MX', 'MX'], 'Volume': [360, 240, 520] }) df_b = pd.DataFrame({ 'Country': ['USA', 'MX'], 'Multiplier': [0.5, 0.25] }) # 按Country左合并,保留df_a的所有行 merged_df = df_a.merge(df_b, on='Country', how='left') # 计算调整后的Volume merged_df['Adjusted_Volume'] = merged_df['Volume'] * merged_df['Multiplier'] # 查看结果 print(merged_df)
说明
how='left'确保df_a中所有行都被保留,如果某个国家在df_b中没有对应乘数,该行的Multiplier会显示为NaN,方便后续排查缺失数据。
方法2:使用map映射(高效简洁)
将df_b转换为{国家: 乘数}的字典,直接通过map方法将乘数匹配到df_a的对应行,再计算乘积。
示例代码
import pandas as pd # 初始化DataFrame df_a = pd.DataFrame({ 'Country': ['USA', 'MX', 'MX'], 'Volume': [360, 240, 520] }) df_b = pd.DataFrame({ 'Country': ['USA', 'MX'], 'Multiplier': [0.5, 0.25] }) # 将df_b转为字典 multiplier_map = df_b.set_index('Country')['Multiplier'].to_dict() # 映射乘数并计算调整值 df_a['Adjusted_Volume'] = df_a['Volume'] * df_a['Country'].map(multiplier_map) # 查看结果 print(df_a)
说明
- 这种方法无需创建中间合并表,代码更简洁,处理大数据量时效率更高。
最终结果示例
处理后的数据会新增Adjusted_Volume列,内容如下:
| Country | Volume | Adjusted_Volume |
|---|---|---|
| USA | 360 | 180.0 |
| MX | 240 | 60.0 |
| MX | 520 | 130.0 |
内容的提问来源于stack exchange,提问作者Anthony Ballestas
相关产品推荐
相关产品推荐

