列的数学运算基于其他列pandas的相同值

问题描述 投票:1回答:2

我的第一个数据帧是:

df1 =     


    A        B
    61880    7
    62646    8
    62651    9
    62656    10
    62783    11

我的第二个数据框是:

df2 =

    C        D
    62783    2
    62646    3
    61880    4
    62656    5
    62651    6

正如你在第一和第二个数据框中看到的那样,我们有相同值的列不是以相同的顺序(!)(col A and col C)

期望的输出是:从具有相同“A”和“C”值的行中获取“B”和“D”的所有值,并对它们进行数学运算(例如,B除以D)。

示例:2 + 11(两者在“A”和“C”列中具有相同的值62783)

加成! EDITED!

非常感谢!我遇到了另一个我忘记提及的问题:

有时,在“A”列中我有相同的值,例如我们可以看到“61880”两次,依此类推:

df1 =

A        B
*61880*    7
**62646**    8
62651    9
62656    10
62783    11
*61880*    3
**62646**    2

我想通过考虑以下因素来做你提到过的同样的过程:

我想基于“B”的值对列“A”进行排序,即“B”的总和。就像是:

 61880    7+3
 62646    8+2
 ...

我用data.groupby('mm_fid')['vel'].sum()做了我得到了结果,但之后我无法进行操作。因此,我想创建具有“B”之和的唯一列,然后继续您提供的答案!

python pandas dataframe
2个回答
1
投票

我相信你需要DataFrame.addDataFrame.set_index

df3 = df1.set_index('A')['B'].add(df2.set_index('C')['D'], fill_value=0).reset_index()
df3.columns = ['A','B']
print (df3)
       A   B
0  61880  11
1  62646  11
2  62651  15
3  62656  15
4  62783  13

另一个解决方案是使用concat与聚合sum

d = {'C':'A', 'D':'B'}
df3 = pd.concat([df1, df2.rename(columns=d)]).groupby('A', as_index=False)['B'].sum()
print (df3)
       A   B
0  61880  11
1  62646  11
2  62651  15
3  62656  15
4  62783  13

3
投票

你需要一个merge,然后只需添加相应的值:

res = df1.merge(df2, left_on='A', right_on='C')
(res.B + res.D).to_frame('result').set_index(res.A)

        result
A            
61880      15
62646      14
62651      21
62656      20
62783      15
© www.soinside.com 2019 - 2024. All rights reserved.