鉴于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
答案 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.
其他比较运算符:
答案 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