将 DataFrame 单行中的所有元素除以同一行中另一列中的元素,然后使用 pandas 对所有行执行此操作?

Dividing all elements in a single row of a DataFrame by an element in another column in that same row and then do this for all rows using pandas?

假设我有一个如下所示的简单数据框,我想将 column_4 中的第 i 个元素分成所有其他列(column_4 除外)中的第 i 个元素特定行,然后对所有行执行此操作。

另一种说法是如何通过第 4 列对第 1、2、3 列进行标准化?有没有简单的方法可以做到这一点?

输入

import pandas as pd

df = pd.DataFrame({'column_1':[1,2,3], 'column_2':[4,5,6], 'column_3':[7,8,9], 'column_4':[2,3,4]})
df.head()

期望输出

df2 = pd.Dataframe({'column_1':[1/2,2/3,3/4], 'column_2':[4/2,5/3,6/4], 'column_3':[7/2,8/3,9/4], 'column_4':[2,3,4]})
df2.head()

请注意 column_1,column_2,column_3 中的每个元素都已除以 column_4 中的等效元素。

注意: 在这种情况下,我使用了一个相对较小的 DataFrame 但是我也想知道是否有一种方法可以概括具有 1000 行和100 列。

选项 1

你可以简单地做

df['column_1'] = df['column_1'] / df['column_4']

等等

操作被矢量化为 numpy

如果你想要一个新的数据框

In [18]: import pandas as pd
    ...: df = pd.DataFrame({'column_1':[1,2,3], 'column_2':[4,5,6], 'column_3':[7,8,9], 'column_4
    ...: ':[2,3,4]})
    ...: df.head()
Out[18]:
   column_1  column_2  column_3  column_4
0         1         4         7         2
1         2         5         8         3
2         3         6         9         4

In [19]: new_df = pd.DataFrame()

In [20]: for col in ['column_1', 'column_2', 'column_3']:
    ...:     new_df[col] = df[col] / df['column_4']
    ...:

In [21]: new_df
Out[21]:
   column_1  column_2  column_3
0  0.500000  2.000000  3.500000
1  0.666667  1.666667  2.666667
2  0.750000  1.500000  2.250000

选项 2

正如 anky 所指出的,您可以像这样在一行中解决这个问题:

df.drop('column_4',1).div(df['column_4'],axis=0)