2014-11-07 87 views
1

我有一個巨大的CSV文件,其中包含一系列項目ID的度量標準,我試圖對比另一項,我想查找每個度量標準中每個項目的四分位數並將每個實際數字替換爲列中的四分位數排名。下面顯示了一些虛擬數據的例子。如果該度量值具有NaN值,我想完全忽略它們。所以對於Metric 2,四分位數將基於具有10個值,而不是12將DF中的值替換爲相對於其他值的四分位數

ID  Metric 1  Metric 2  Metric 3 
----------------------------------------- 
1  10   4.8   155   
2  11   5.6   301 
3  7   7.9   223 
4  14   NaN   88 
5  4   NaN   109 
6  18   6.6   213 
7  13   3.9   456 
8  5   8.1   403 
9  10   9.2   353 
10  11   4.1   312 
11  9   5.3   286 
12  6   3.3   215 


ID  Metric 1  Metric 2  Metric 3 
----------------------------------------- 
1  2   2   1   
2  3   3   3 
3  2   4   2 
4  4   NaN   1 
5  1   NaN   1 
6  4   3   2 
7  4   1   4 
8  1   4   4 
9  2   4   4 
10  3   2   3 
11  2   2   3 
12  1   1   2 

的專欄中,我知道有一個更好的方式大熊貓不僅僅是通過每個細胞循環,從而做到這一點,但我不是很確定如何接近它。

回答

1

您正在尋找帶有標籤設置的Pandas中的qcut方法。這裏有一個例子:

創建示例數據:

df1 = pd.DataFrame({'M1': randint(size=12, low=100, high = 500)}) 
df1['ID'] = df1.index 
print df1.head() 


    M1 ID 
0 281 0 
1 455 1 
2 401 2 
3 313 3 
4 432 4 

只要沒有分組,簡單地創建使用一個新的變量:

df1['M1Q'] = pd.qcut(df1.M1, 4, labels=[1,2,3,4]) 
print df1 

    M1 ID M1Q 
0 281 0 3 
1 455 1 4 
2 401 2 4 
3 313 3 3 
4 432 4 4 
5 208 5 3 
6 207 6 2 
7 205 7 2 
8 130 8 1 
9 126 9 1 
10 167 10 2 
11 163 11 1 

根據幫助文件qcut()不你用空值表達什麼。但我們不妨向自己證明這一點。因此,讓我們吹出來的一些數據,並再次運行:

df1.M1.iloc[8:] = NaN 
df1['M1Q'] = pd.qcut(df1.M1, 4, labels=[1,2,3,4]) 
print df1 

    M1 ID M1Q 
0 356 0 3 
1 466 1 4 
2 420 2 3 
3 429 3 4 
4 165 4 1 
5 140 5 1 
6 231 6 2 
7 230 7 2 
8 NaN 8 NaN 
9 NaN 9 NaN 
10 NaN 10 NaN 
11 NaN 11 NaN 

我覺得看起來像你是什麼之後。祝你好運!

+0

這是完美的,謝謝 – weskpga 2014-11-09 04:39:28

相關問題