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)))
In [47]: %timeit df.apply(lambda x: pd.qcut(x, 5, labels=list(range(5))), axis=0)
100 loops, best of 3: 2.9 ms per loop
In [48]: %%timeit
df_q = pd.DataFrame()
for col in df:
df_q[col] = pd.qcut(df[col], 5, labels=list(range(5)))
100 loops, best of 3: 2.95 ms per loop
注意
for i in list(range(len(df.columns))):
只會工作,如果df
列正好是連續整數從0開始。 更強大的使用
for col in df:
遍歷的列DataFrame。
夠公平的,謝謝你。 – MJS
你會怎麼稱它爲行? –
@ thomas.mac:將'axis = 0'更改爲'axis = 1'以將函數應用於行。 – unutbu