在给定 'mapping dataframe' 的情况下分解 pandas 数据框的行

Exploding rows of a pandas dataframe given a 'mapping dataframe'

我必须数据帧。我需要对数据帧 A 执行操作。它看起来像这样:

姓名 得分
阿尔法 16
测试版 12
伽玛 24
增量 16

第二个数据帧 B 是一个映射。

name_in name_out 体重
测试版 beta_1 0.5
测试版 beta_2 0.3
测试版 beta_3 0.2
欧米茄 omega_1 0.9
欧米茄 omega_2 0.1

如果我在数据帧 A 上执行映射,我需要以下结果:

姓名 得分
阿尔法 16
beta_1 6
beta_2 3.6
beta_3 2.4
伽玛 24
增量 16

因此,从概念上讲,我需要一种算法来检查名称是否出现在映射数据框中。如果是这样,我需要为映射中存在的值复制行。另外,我需要将重复的分数乘以映射的权重。

根据映射,该过程基本上增加了一个细节级别。

一种选择是使用 merge followed by fillna 来填充缺失值:

# Merge Tables Together
new_df = df_a.merge(df_b, left_on='name', right_on='name_in', how='left')

# Fillna with Name
new_df['name_out'] = new_df['name_out'].fillna(new_df['name'])
# Calculate Scores and fillna
new_df['weight'] = (new_df['weight'] * new_df['score']).fillna(new_df['score'])

# Cleanup columns
new_df = (
    new_df.drop(columns=['name', 'score', 'name_in'])
        .rename(columns={'name_out': 'name', 'weight': 'score'})
)

new_df:

     name  score
0   alpha   16.0
1  beta_1    6.0
2  beta_2    3.6
3  beta_3    2.4
4   gamma   24.0
5   delta   16.0