将 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)
假设我有一个如下所示的简单数据框,我想将 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)