Python 熊猫根据其最大值划分多个列

Python 熊猫根据其最大值划分多个列,python,pandas,Python,Pandas,我有一个包含40列的数据帧,其中一些列是只包含0或1的二进制列。我想用一个名为“size”的列来划分所有非二进制列 现在我正在使用: for i in range(df.shape[1]): col = df.iloc[:, i] if int(col.max()) > 1: # to check whether this column is binary df.iloc[:, i] = col/df['size'] i+=1 我觉得我们应该避免在

我有一个包含40列的数据帧,其中一些列是只包含0或1的二进制列。我想用一个名为“size”的列来划分所有非二进制列

现在我正在使用:

for i in range(df.shape[1]):
    col = df.iloc[:, i]
    if int(col.max()) > 1: # to check whether this column is binary
        df.iloc[:, i] = col/df['size']
    i+=1

我觉得我们应该避免在pandas中使用foor循环,那么有没有更优雅的方法来实现这一点呢?

以下类似的方法应该可以工作(假设数据帧中至少有一个非二进制列):


类似于以下的方法应该可以工作(假设数据帧中至少有一个非二进制列):


此处不需要IMHO
numpy
tolist
,熊猫拥有此任务的一切:

返回最大值大于1的所有列并丢弃“大小”:

cols = df.columns[df.max()>1].drop('size')
对于计算,只选择整列,不选择子集,因此您可以不使用“ix”或“loc”,直接按列名索引:

df[cols] = df[cols].div(df['size'], 0)

此处不需要IMHO
numpy
tolist
,熊猫拥有此任务的一切:

返回最大值大于1的所有列并丢弃“大小”:

cols = df.columns[df.max()>1].drop('size')
对于计算,只选择整列,不选择子集,因此您可以不使用“ix”或“loc”,直接按列名索引:

df[cols] = df[cols].div(df['size'], 0)

ix
自v0.20以来已被弃用,请改用
.loc
ix
自v0.20以来已被弃用,请改用
.loc