python—是否可以对数据帧中的每一列应用百分位剪切?

python—是否可以对数据帧中的每一列应用百分位剪切?,python,pandas,vectorization,quantile,Python,Pandas,Vectorization,Quantile,是否可以使用循环将百分位数的剪切放置在数据帧的所有列上?我现在就是这样做的: df = pd.DataFrame(np.random.randn(10,5)) df_q = pd.DataFrame() for i in list(range(len(df.columns))): df_q[i] = pd.qcut(df[i], 5, labels=list(range(5))) 我希望有一个巧妙的解决方案来避免使用循环 谢谢 pd.qcut接受一维数组或序列作为其参数。要将pd.q

是否可以使用循环将百分位数的剪切放置在数据帧的所有列上?我现在就是这样做的:

df = pd.DataFrame(np.random.randn(10,5))
df_q = pd.DataFrame()

for i in list(range(len(df.columns))):
    df_q[i] = pd.qcut(df[i], 5, labels=list(range(5)))
我希望有一个巧妙的解决方案来避免使用循环


谢谢

pd.qcut
接受一维数组或序列作为其参数。要将
pd.qcut
应用于每一列,需要多次调用
pd.qcut
。所以不管你怎么打扮,都会有一个循环——无论是显式的还是隐式的

例如,可以使用
apply
为每个列调用
pd.qcut

In [46]: df.apply(lambda x: pd.qcut(x, 5, labels=list(range(5))), axis=0)
Out[46]: 
   0  1  2  3  4
0  4  0  3  0  3
1  0  0  2  3  0
2  3  4  1  2  3
3  4  1  1  1  4
4  3  2  2  4  1
5  2  4  3  0  1
6  2  3  0  4  4
7  1  3  4  2  2
8  0  1  4  3  0
9  1  2  0  1  2
但是在引擎盖下,
df.apply
使用了一个
for loop
,因此它与您的
for loop
没有太大区别:

df_q = pd.DataFrame()
for col in df:
    df_q[col] = pd.qcut(df[col], 5, labels=list(range(5)))


注意

for i in list(range(len(df.columns))):
仅当
df
的列恰好是从0开始的顺序整数时,才有效。 它使用起来更加健壮

for col in df:

迭代数据帧的列。

如何对行调用它?@thomas.mac:将
axis=0
更改为
axis=1
以将函数应用于行。但是,请注意,数据帧是,因此如果有大量基于行的数值计算,您可能需要考虑转置您的数据文件:<代码> df= df.t>代码>,因此它们成为基于列的计算。
for col in df: