数据帧中的加号等于

2024-09-30 02:22:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试匹配来自两个不同数据帧的值。第一个数据框有一个列,其中的值是名称的组合,如('John Bradford', 'Brad Johnford')。第二个数据框有三个列“name”、“Salary”、“Percentage”,如下所示

     Name               Salary       Percentage
'John Bradford'         60,000         .30
'Brad Johnford'         50,000         .40
'Steve Blue'            10,000         .20

我需要在combos数据框中添加工资总额作为新列,然后添加百分比的新列,每个百分比乘以每个员工组合

最终的数据帧将如下所示

            Combos                  Total Salary    Total Percentage
('John Bradford', 'Steve Blue')        70,000             0.06
('John Bradford', 'Brad Johnford')     110,000            0.12

在数据帧上迭代,直到在组合中选中每个播放器

for index, _ in employee_pool.iterrows():
    for idx, _ in combo_pool.iterrows():
        if employee_pool.at[index, 'Name'] in combo_pool.at[idx, 'Combo']:
            combo_pool.at[idx, 'Salary'] += player_pool.at[index, 'Salary']
            combo_pool.at[idx, 'Percentage'] *= float(player_pool.at[index, 'Percentage'].replace('%', ''))

我试着用plus-equals速记法把每个薪水加起来,然后乘以百分比,但结果却是空的。如果我将+=更改为刚好等于,则它适用于组合中的一个名称,但不添加其余的值

我是否应该使用内置函数来代替速记


Tags: 数据in名称indexjohnat百分比pool
1条回答
网友
1楼 · 发布于 2024-09-30 02:22:47

我冒昧地从您的工资中删除逗号,以便将它们相加。无论如何,这都可以

基本上,您可以分解元组,加入第二个数据帧,并使用原始索引进行分组和聚合。然后,您可以将其转换回原始df

df = pd.DataFrame({'Combos':[('John Bradford','Steve Blue'),('John Bradford','Brad Johnford')]})
names = df.Combos.explode().to_frame().reset_index()

df2 = pd.DataFrame({'Name': {0: 'John Bradford', 1: 'Brad Johnford', 2: 'Steve Blue'},
 'Salary': {0: 60000, 1: 50000, 2: 10000},
 'Percentage': {0: 0.3, 1: 0.4, 2: 0.2}})
    
names = names.merge(df2, left_on='Combos', right_on='Name')

pd.concat([df, names.groupby('index').agg({'Salary':sum,'Percentage':np.product})], axis=1)

输出

                           Combos  Salary  Percentage
0     (John Bradford, Steve Blue)   70000        0.06
1  (John Bradford, Brad Johnford)  110000        0.12

相关问题 更多 >

    热门问题