2012-08-09 30 views
7

पर वापस जुड़ना मैं अपने मस्तिष्क को pandas डेटा संरचनाओं के चारों ओर लपेटने की कोशिश कर रहा हूं और क्रोध में उनका उपयोग करने की कोशिश कर रहा हूं। मुझे पता चला है कि groupby संचालन के परिणामस्वरूप पांडा श्रृंखला वस्तु होती है। लेकिन मैं समझ नहीं पा रहा हूं कि परिणामस्वरूप श्रृंखला का उपयोग कैसे करें।एक पांडैस श्रृंखला में एक पदानुक्रमित इंडेक्स के साथ स्रोत डेटाफ्रेम

1) "में शामिल होने" वापस प्रारंभिक DataFrame

2) करने के लिए परिणाम श्रेणीबद्ध सूचकांक के आधार पर जिसके परिणामस्वरूप श्रृंखला से एक विशिष्ट मूल्य का चयन करें: विशेष रूप से, मैं दो बात करना चाहते हैं।

import pandas 
df = pandas.DataFrame({'group1': ['a','a','a','b','b','b'], 
         'group2': ['c','c','d','d','d','e'], 
         'value1': [1.1,2,3,4,5,6], 
         'value2': [7.1,8,9,10,11,12] 
}) 
dfGrouped = df.groupby(["group1", "group2"] , sort=True) 

## toy function, obviously not my real function 
def fun(x): return mean(x**2) 

results = dfGrouped.apply(lambda x: fun(x.value1)) 

तो जिसके परिणामस्वरूप श्रृंखला (परिणाम) इस तरह दिखता है:

यहाँ के साथ काम करने के लिए एक खिलौना उदाहरण है

group1 group2 
a  c   2.605 
     d   9.000 
b  d   20.500 
     e   36.000 

समझ में आता है कि। लेकिन मैं कैसे करना है:

1) मूल DataFrame df

2) को यह वापस में शामिल होने के लिए एक एकल मूल्य का चयन करें जहां, कहते हैं, GROUP1 == 'बी' & समूह 2 == 'प'

उत्तर

8

तो शेष # के लिए 1: आसपास monkeying जब मैं # 2 का जवाब खोज की।

In [9]: df 
Out[9]: 
    group1 group2 value1 value2 
0  a  c  1.1  7.1 
1  a  c  2.0  8.0 
2  a  d  3.0  9.0 
3  b  d  4.0 10.0 
4  b  d  5.0 11.0 
5  b  e  6.0 12.0 

In [10]: results 
Out[10]: 
group1 group2 
a  c   2.605 
     d   9.000 
b  d   20.500 
     e   36.000 

In [11]: df.set_index(['group1', 'group2'], inplace=True)['results'] = results 

In [12]: df 
Out[12]: 
       value1 value2 results 
group1 group2 
a  c   1.1  7.1 2.605 
     c   2.0  8.0 2.605 
     d   3.0  9.0 9.000 
b  d   4.0 10.0 20.500 
     d   5.0 11.0 20.500 
     e   6.0 12.0 36.000 

In [13]: df.reset_index() 
Out[13]: 
    group1 group2 value1 value2 results 
0  a  c  1.1  7.1 2.605 
1  a  c  2.0  8.0 2.605 
2  a  d  3.0  9.0 9.000 
3  b  d  4.0 10.0 20.500 
4  b  d  5.0 11.0 20.500 
5  b  e  6.0 12.0 36.000 
+1

ऐसा लगता है कि मैं वास्तव में क्या करने की कोशिश कर रहा था। इंडेक्स को सेट करने का यह एक अच्छा उदाहरण है। मुझे एहसास नहीं हुआ कि यह कैसे काम करता है। –

+0

@ वाउटर-ओवरमेयर - बहुत अच्छा। मैं आज इस के साथ संघर्ष कर रहा था। – John

+0

@ वाउटर-ओवरमेयर, @ जेडी-लांग - यह कैसे काम करेगा यदि एक से अधिक परिणाम डेटाफ्रेम पर वापस जोड़े जाएंगे। उदा। दो अलग-अलग कार्यों के परिणाम कैसे हो सकते हैं, उदा। 'डीसी यूसीएल (एक्स): वापसी का मतलब (x2) + np.std * 2' और' def एलसीएल (एक्स): वापसी का मतलब (x2) -np.std * 2' वापस डीएफ में पास किया जाना चाहिए? या कोई बेहतर तरीका है? – John

3

results["b","d"] मुझे मूल्य देता है जहां GROUP1 == 'बी' & समूह 2 == 'प'