2013-10-05 7 views
8

मैंपांडा में ग्रुपबी ऑब्जेक्ट से कॉलम का चयन कैसे करें?

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() 

नीचे दो कॉलम के आधार पर अपना dataframe वर्गीकृत किया और परिणाम है:

  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') 
इस रूप में

पारित पूर्णांक मान पास करने की तुलना में अधिक सहज ज्ञान युक्त हो जाएगा कर सकते हैं।

आप अपने GroupBy परिणाम पर 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() कर सकते हैं बुला वापस नाम कॉलम अब सुलभ के साथ एक dataframe पाने के लिए द्वारा एक सूची के लिए सूचक मान बदल सकते हैं।

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 

आप किसी एकल स्तंभ पर कार्रवाई तो वापसी multiindex के साथ एक श्रृंखला हो जाएगा और आप बस इसे करने के लिए 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() 
संबंधित मुद्दे