2017-07-27 84 views
3

有一個大熊貓數據幀:如何根據列中前20%的值創建熊貓數據框?

df = pd.DataFrame({'c1':['a','b','c','d','e','f','g','h','i','j'], 
        'c2':[10,12,23,4,18,98,11,23,33,99]}) 


    c1 c2 
0 a 10 
1 b 12 
2 c 23 
3 d 4 
4 e 18 
5 f 98 
6 g 11 
7 h 23 
8 i 33 
9 j 99 

我想創建僅包含根據在柱C2的值的前20%的行,在這種情況下新的數據幀:

輸出:

c1 c2 
0 f 98 
1 j 99 

回答

2

你可以使用quantile方法來計算80百分位閾值和保持較大的值比:

df[df.c2.gt(df.c2.quantile(0.8))] 

# c1 c2 
#5 f 98 
#9 j 99 

或者使用nlargest

df.nlargest(int(len(df) * 0.2), 'c2') 
# c1 c2 
#9 j 99 
#5 f 98 
1
df = df.sort_values(by=['c2'],ascending = True) 
split_len = int(0.8*len(df)) 
df = df.iloc[split_len:] 
2

在各種利益...

top_percentage = 0.2 
>>> df.sort_values('c2').tail(int(len(df) * top_percentage)) 
# Output: 
# c1 c2 
# 5 f 98 
# 9 j 99 
1

使用pct=True選項上pd.Series.rank方法

df[df.c2.rank(pct=True).gt(.8)] 

    c1 c2 
5 f 98 
9 j 99 
相關問題