2017-07-26 52 views
1

我在包含三列[id,country,volume]的索引是'id'的數據框中有一些簡單的數據。在熊貓DataFrameGroupBy對象上使用`rank`

我可以進行簡單的操作,如:

df_vol.groupby('country').sum() 

,它按預期工作。當我嘗試使用rank()時,它不能按預期工作,並且結果爲空數據框。

df_vol.groupby('country').rank() 

結果是不一致的,在某些情況下,它的工作原理。下面的方式也按預期工作:

df_vol.rank() 

我要像返回的東西:

vols = [] 
for _, df in f_vol.groupby('country'): 
    vols.append(df['volume'].rank()) 
pd.concat(vols) 

任何想法,爲什麼非常感謝!

+0

想我能不能有所tider使用列表理解,但仍然好奇,爲什麼它沒有工作。 – user2579685

回答

3

您可以通過[]添加列 - 功能僅適用於Volume列呼叫:

df_vol.groupby('country')['volume'].rank() 

樣品:

df_vol = pd.DataFrame({'country':['en','us','us','en','en'], 
        'volume':[10,10,30,20,50], 
        'id':[1,1,1,2,2]}) 
print(df_vol) 
    country id volume 
0  en 1  10 
1  us 1  10 
2  us 1  30 
3  en 2  20 
4  en 2  50 

df_vol['r'] = df_vol.groupby('country')['volume'].rank() 
print (df_vol) 
    country id volume r 
0  en 1  10 1.0 
1  us 1  10 1.0 
2  us 1  30 2.0 
3  en 2  20 2.0 
4  en 2  50 3.0 
+0

實際上,這仍然不起作用,並且我得到了源於groupby.py中wrapper()函數的值錯誤。 rank()在單列上仍然按預期工作。 – user2579685

+0

嗯,數據有問題嗎?數據是數字? – jezrael

+0

所有的數字和等級都可以在未分組的數據集上正常工作。所有數字但非常大的數字。 – user2579685