2013-10-05 44 views
8

我分組數據框我用兩列下面如何從pandas中的groupby對象中選擇列?

df = pd.DataFrame({'a': [1, 1, 3], 
        'b': [4.0, 5.5, 6.0], 
        'c': [7L, 8L, 9L], 
        'name': ['hello', 'hello', 'foo']}) 
df.groupby(['a', 'name']).median() 

,其結果是:

  b c 
a name    
1 hello 4.75 7.5 
3 foo 6.00 9.0 

如何我可以訪問得到的中的name場(在這種情況下hello, foo)?這會失敗:

df.groupby(['a', 'name']).median().name 

回答

10

您需要獲取索引值,它們不是列。在這種情況下,1級

df.groupby(["a", "name"]).median().index.get_level_values(1) 

Out[2]: 

Index([u'hello', u'foo'], dtype=object) 

您也可以通過索引名

df.groupby(["a", "name"]).median().index.get_level_values('name') 

,因爲這會比經過整數值更直觀。

你可以通過調用tolist()

df.groupby(["a", "name"]).median().index.get_level_values(1).tolist() 

Out[5]: 

['hello', 'foo'] 
+0

如果水平有一個名字,那麼你可以通過名稱這是稍微比數字索引更清晰訪問期間。 'index.get_level_values( '名稱')'。 –

+0

@PhillipCloud是的,我忘了你也可以這樣做,我懶得打字。我會更新答案 – EdChum

0

您也可以reset_index()您GROUPBY結果取回名爲列現在訪問的數據框轉換的指數值的列表。

import pandas as pd 
df = pd.DataFrame({"a":[1,1,3], "b":[4,5.5,6], "c":[7,8,9], "name":["hello","hello","foo"]}) 
df_grouped = df.groupby(["a", "name"]).median() 
df_grouped.name 
0 hello 
1  foo 
Name: name, dtype: object 

如果您對單個列執行操作的回報率將與多指標系列,你可以簡單地應用到pd.DataFrame,然後reset_index。

5

as_index = False GROUPBY

df = pandas.DataFrame({"a":[1,1,3], "b":[4,5.5,6], "c":[7,8,9], "name":["hello","hello","foo"]}) 
df.groupby(["a", "name"] , as_index = False).median()