如何将每个数字除以 python 中每一行的总和
how do I divide each number by sum of each row in python
如何将每个数字除以总和? (跳过零)
我想将每一行除以它的总和
例如。 0(第 0 列的数字)/2(求和列)
0 1 2 3 4 5 6 7 ... sum
0 0 0 0 1 0 0 0 ... 2
结果
0 1 2 3 4 5 6 7 ... sum
0 0 0 0 0.5 0 0 0 2
你可以试试这样的
#### this will contain everyother column except sum
required_columns = df.columns[~df.contains.str.contains('sum')]
### regex can also be used with contains , I m here assuming you all other column will not be named as sum , for which the division is to be performed
for col in required_colums:
print (f'---------- {col} --------')
df.loc[:,col] = df.loc[:,col]/df.loc[:,'sum']
你也可以给出这个来得到同样的答案。
df.iloc[:,:-1] = df.apply(lambda r: r/r['sum'] if r['sum'] != 0 else r['sum'],axis=1).round(2)
这个输出将是:
来源 df:
0 1 2 3 4 5 6 7 sum
0 0 0 0 0 1 0 0 0 2
1 0 0 0 6 0 0 0 0 18
2 0 0 0 0 1 0 0 0 0
3 0 0 3 0 0 0 4 0 1
这将导致:
0 1 2 3 4 5 6 7 sum
0 0.0 0.0 0.0 0.00 0.5 0.0 0.0 0.0 2
1 0.0 0.0 0.0 0.33 0.0 0.0 0.0 0.0 18
2 0.0 0.0 0.0 0.00 0.0 0.0 0.0 0.0 0
3 0.0 0.0 3.0 0.00 0.0 0.0 4.0 0.0 1
以上代码解释如下:
在等式的左边,我有 iloc。您可以在此处获得 iloc 的更多文档。
df.iloc[:,:-1]
这里我选择所有行(第一组:,)。第二组是列。除了最后一列 sum
列之外,我将右侧的计算值分配给了所有列。我不想替换那个值。
df.apply 将一次处理一行数据帧。在此处查看 df.apply 的示例
在这里,我选择第一行 (r) 并进行处理。您想要计算列 (x) / 列 ('sum')。这就是我正在做的。它对行中的每一列执行此操作。
我也在检查 r['sum']
是否不等于零以避免被零除错误。如果 r['sum']
的值为零,那么我将发送 r['sum']
(或零)。
DataFrame 对象有两个轴:“轴 0”和“轴 1”。 “axis 0”代表行,“axis 1”代表列。我正在使用 axis = 1
遍历行而不是每列中的值。
希望这个解释对您有所帮助。
如何将每个数字除以总和? (跳过零) 我想将每一行除以它的总和
例如。 0(第 0 列的数字)/2(求和列)
0 1 2 3 4 5 6 7 ... sum
0 0 0 0 1 0 0 0 ... 2
结果
0 1 2 3 4 5 6 7 ... sum
0 0 0 0 0.5 0 0 0 2
你可以试试这样的
#### this will contain everyother column except sum
required_columns = df.columns[~df.contains.str.contains('sum')]
### regex can also be used with contains , I m here assuming you all other column will not be named as sum , for which the division is to be performed
for col in required_colums:
print (f'---------- {col} --------')
df.loc[:,col] = df.loc[:,col]/df.loc[:,'sum']
你也可以给出这个来得到同样的答案。
df.iloc[:,:-1] = df.apply(lambda r: r/r['sum'] if r['sum'] != 0 else r['sum'],axis=1).round(2)
这个输出将是:
来源 df:
0 1 2 3 4 5 6 7 sum
0 0 0 0 0 1 0 0 0 2
1 0 0 0 6 0 0 0 0 18
2 0 0 0 0 1 0 0 0 0
3 0 0 3 0 0 0 4 0 1
这将导致:
0 1 2 3 4 5 6 7 sum
0 0.0 0.0 0.0 0.00 0.5 0.0 0.0 0.0 2
1 0.0 0.0 0.0 0.33 0.0 0.0 0.0 0.0 18
2 0.0 0.0 0.0 0.00 0.0 0.0 0.0 0.0 0
3 0.0 0.0 3.0 0.00 0.0 0.0 4.0 0.0 1
以上代码解释如下:
在等式的左边,我有 iloc。您可以在此处获得 iloc 的更多文档。
df.iloc[:,:-1]
这里我选择所有行(第一组:,)。第二组是列。除了最后一列 sum
列之外,我将右侧的计算值分配给了所有列。我不想替换那个值。
df.apply 将一次处理一行数据帧。在此处查看 df.apply 的示例
在这里,我选择第一行 (r) 并进行处理。您想要计算列 (x) / 列 ('sum')。这就是我正在做的。它对行中的每一列执行此操作。
我也在检查 r['sum']
是否不等于零以避免被零除错误。如果 r['sum']
的值为零,那么我将发送 r['sum']
(或零)。
DataFrame 对象有两个轴:“轴 0”和“轴 1”。 “axis 0”代表行,“axis 1”代表列。我正在使用 axis = 1
遍历行而不是每列中的值。
希望这个解释对您有所帮助。