【问题标题】:How to divide sing column by multiple columns in pandas?如何在熊猫中将单列除以多列?
【发布时间】:2019-07-22 03:05:57
【问题描述】:

我想将单列除以多列(Z/A1~A10)并在多列上返回值。(A1~A10)

听到的是我的数据框。

ID  A1  A2  A3  A4  …   A10 Z
1   6   9   3   3   4   3   69
2   8   3   8   3   3   10  85
3   1   2   4   4   7   5   93
4   1   6   6   4   7   5   91
5   6   4   6   8   10  10  79
6   8   10  7   2   7   10  50
7   10  3   4   7   10  2   63
8   4   7   3   7   6   1   91

我的预期输出如下。

ID  A1        A2      A3      A4    …        A10    Z
1    11.5    7.7     23.0    23.0    17.3    23.0   69
2    10.6    28.3    10.6    28.3    28.3    8.5    85
3    93.0    46.5    23.3    23.3    13.3    18.6   93
4    91.0    15.2    15.2    22.8    13.0    18.2   91
5    13.2    19.8    13.2    9.9     7.9     7.9    79
6    6.3     5.0     7.1     25.0    7.1     5.0    50
7    6.3     21.0    15.8    9.0     6.3     31.5   63
8    22.8    13.0    30.3    13.0    15.2    91.0   91

我已经用这个代码试过了。

list = [A1, A2, A3, ... A10]
df.loc[:, list] = df['Z'] / df[:, list]

但是,A1~A10 列的结果为空白。 我怎样才能为这个任务编写代码?

【问题讨论】:

    标签: python pandas divide


    【解决方案1】:

    df.loc[:, list] = df.loc[:, list].apply(lambda col: df.Z / col)

    【讨论】:

      【解决方案2】:

      设置

      import pandas as pd
      import numpy as np
      
      np.random.seed(0)
      
      cols = ['A' + str(n) for n in range(1,11)]
      df = pd.DataFrame(
          np.random.randint(0,10, (8,10)),
          columns=cols
      )
      
      df['Z'] = np.random.randint(0,70, 8)
      

      计算

      利用 pandas 数据帧基本上只是 numpy 数组这一事实。仅访问要对其应用函数的列(这就是 df.loc[:, 'A10'] 的用途。请参阅 pandas docs for help on slicing)。

      .apply 方法需要一个函数,默认情况下应用于每一列(即一列是输入参数)。这意味着您将 Z 列(df['Z'])除以 df 中每一列的值(df['A1']df['A2'] 等...)

      正如我所提到的,pandas 数据结构是建立在 numpy 数组之上的。因此,将一个 8 x 1 形状的数组(df['Z'] 列)除以另一个 8 x 1 数组(每隔一列),将意味着您将每个元素除以等效元素(Z 中的第一个除以另一列中的第一个, 第 2 到第 2, 第 3 到第 3 等等...)

      df.loc[:, 'A10'].apply(lambda col: df['Z'] / col)
      

      【讨论】:

        【解决方案3】:

        您可以简单地遍历列并划分:

        for col in df.drop('Z',axis=1).columns:
            df[col] = df['Z'] / df[col]
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-12-08
          • 2021-08-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-12-02
          • 2020-01-02
          • 2017-05-28
          相关资源
          最近更新 更多