【问题标题】:Quickly replace values in a Pandas DataFrame快速替换 Pandas DataFrame 中的值
【发布时间】:2021-11-28 20:00:01
【问题描述】:

我有以下数据框:

df = pd.DataFrame(
    {
        'A':[1,2],
        'B':[3,4]
    }, index=['1','2'])

df.loc[:,'Sum'] = df.sum(axis=1)
df.loc['Sum'] = df.sum(axis=0)

print(df)

#      A  B  Sum
# 1    1  3    4
# 2    2  4    6
# Sum  3  7   10

我想:

  • 将 1 替换为 3*4/10
  • 将 2 替换为 3*6/10
  • 将 3 替换为 4*7/10
  • 将 4 替换为 7*6/10

最简单的方法是什么?我希望解决方案能够扩展到 n 行和列。一直在为此烦恼。蒂亚!

【问题讨论】:

    标签: pandas dataframe replace


    【解决方案1】:

    让我们先尝试从原始 df 创建它,然后再进行求和并分配

    import numpy as np 
    
    v = np.multiply.outer(df.sum(1).values,df.sum().values)/df.sum().sum()
    out = pd.DataFrame(v,index=df.index,columns=df.columns)
    out
    Out[20]: 
         A    B
    1  1.2  2.8
    2  1.8  4.2
    

    【讨论】:

      【解决方案2】:

      如果我理解正确的话:

      df = pd.DataFrame(
          {
              'A':[1,2],
              'B':[3,4]
          }, index=['1','2'])
      
      df.loc[:,'Sum'] = df.sum(axis=1)
      df.loc['Sum'] = df.sum(axis=0)
      print(df)
      
      conditions = [(df==1), (df==2), (df==3), (df==4)]
      values = [(3*4)/10, (3*6)/10, (4*7)/10, (7*6)/10]
      df[df.columns] = np.select(conditions, values, df)
      

      输出:

             A    B   Sum
      1    1.2  2.8   4.2
      2    1.8  4.2   6.0
      Sum  2.8  7.0  10.0
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-08-15
        • 2014-06-12
        • 2018-11-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-04
        相关资源
        最近更新 更多