【问题标题】:Math operations of column based on same values of other column pandas基于其他列熊猫相同值的列数学运算
【发布时间】:2019-09-08 17:36:39
【问题描述】:

我的第一个数据框是:

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)

添加!已编辑!

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

有时,在“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


    【解决方案1】:

    你需要一个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
    

    【讨论】:

      【解决方案2】:

      我相信你需要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
      

      【讨论】:

        猜你喜欢
        • 2017-03-03
        • 2016-01-27
        • 2020-12-27
        • 2023-01-24
        • 2019-01-31
        • 2021-07-28
        • 1970-01-01
        • 2018-06-23
        • 2017-03-11
        相关资源
        最近更新 更多