将多个列除以pandas中的另一列

itz*_*tzy 34 python pandas

我需要将第一列中除第一列以外的所有列除以第一列.

这就是我正在做的事情,但我想知道这不是"正确"的熊猫方式:

df = pd.DataFrame(np.random.rand(10,3), columns=list('ABC'))

df[['B', 'C']] = (df.T.iloc[1:] / df.T.iloc[0]).T
Run Code Online (Sandbox Code Playgroud)

有办法做某事df[['B','C']] / df['A']吗?(这只是给出10x12的数据帧nan.)

此外,在阅读了一些关于SO的类似问题之后,我尝试了df['A'].div(df[['B', 'C']])但是这会产生广播错误.

Dth*_*hal 46

我相信df[['B','C']].div(df.A, axis=0)并且df.iloc[:,1:].div(df.A, axis=0)工作.

  • 我相信你也可以做df.loc [:, cols] = df.loc [:, cols] .div(df ['A'],axis = 0)`,只划分一部分列 (6认同)
  • 无需将D列移到索引,只需执行以下操作:`df [[''B','C']] = df [['B','C']]。div(df.A,axis = 0) `。所有其他列都保留在数据框df中 (4认同)
  • 这很好用,但生成的数据框缺少上述分区中未使用的其他列。例如,如果有一个 D 列没有被 A 分割,则结果数据框缺少 D 列和 A 列。有什么办法可以克服这个问题? (3认同)
  • 为什么默认不广播? (3认同)

小智 10

do: df.iloc[:,1:] = df.iloc[:,1:].div(df.A, axis=0)
Run Code Online (Sandbox Code Playgroud)

这将除第一列以外的所有列,并将“A”列用作除数。

结果是1st column + all columns after / 'divisor column'.