在Pandas中将列的范围从0到1乘以100

时间:2015-05-08 19:07:46

标签: python pandas

鉴于Pandas数据帧:

 df = pd.DataFrame({'A':[1, 2, 3, 4, 5], 
                    'B': [0.1, 0.2, 0.3, 0.4, 0.5], 
                    'C': [11, 12, 13, 14, 15]})

   A    B   C
0  1  0.1  11
1  2  0.2  12
2  3  0.3  13
3  4  0.4  14
4  5  0.5  15

对于值范围介于0和1之间的所有列,我希望将这些列中的所有值乘以常量(例如,100)。我不知道哪些列的值介于0和1之间,并且有100多列。

   A    B   C
0  1   10  11
1  2   20  12
2  3   30  13
3  4   40  14
4  5   50  15

我尝试使用.min()和.max()并将它们与所需范围进行比较,以返回每列的True / False值。

(df.min() >= 0) & (df.max() <= 1)

A    False
B     True
C    False

但是如何选择True列并将这些值乘以100并不明显。

更新

我想出了这个解决方案

col_names = ((df.min() >= 0) & (df.max() <= 1)).index
df[col_names] = df[col_names] * 100

4 个答案:

答案 0 :(得分:1)

这样的东西?

to_multiply = [col for col in df if 1 >= min(df[col]) >= 0 and 1 >= max(df[col]) >= 0]

df[to_multiply] = df[to_multiply] * 100

答案 1 :(得分:1)

我们可以构造一个布尔掩码来测试df中的值是否大于(gt)0且小于(lt)1然后调用np.all并传递{ {1}}生成一个布尔掩码来过滤列,然后将该列中的所有值乘以100:

axis=0

突破以上:

In [58]:

df[df.columns[np.all(df.gt(0) & df.lt(1),axis=0)]] *= 100
df
Out[58]:
   A   B   C
0  1  10  11
1  2  20  12
2  3  30  13
3  4  40  14
4  5  50  15

答案 2 :(得分:1)

您可以根据选择条件update使用DataFrame:

response

任何大于或等于零且小于或等于1的列都会乘以100.

其他比较运算符:

  • .ge(大于或等于)
  • .gt(大于)
  • .le(小于或等于)
  • .lt(小于)
  • .eq(等于)

答案 3 :(得分:0)

使用.all()检查所有值是否在范围内,如果为真,则将它们相乘 -

In [1877]: paste
for col in df.columns:
        if (0<df[col]).all() and (df[col]<1).all():
                df[col] = df[col] * 100

## -- End pasted text --

In [1878]: df
Out[1878]: 
   A   B   C
0  1  10  11
1  2  20  12
2  3  30  13
3  4  40  14
4  5  50  15