2016-04-19 8 views
7

मुझे एक पांडा श्रृंखला मिली है जिसमें प्रत्येक सेल एक ट्यूपल है। मैं उस श्रृंखला पर एक रोलिंग() लागू() लागू करने की कोशिश कर रहा हूं, और जिस फ़ंक्शन को मैं लागू करने का प्रयास कर रहा हूं उसे कभी भी कॉल नहीं किया जा रहा है। यहां एक मूर्खतापूर्ण उदाहरण से पता चलता है कि मैं किस बारे में बात कर रहा हूँ है:श्रृंखला में संग्रह होने पर मेरे पांडा रोलिंग() लागू क्यों नहीं होते हैं?

>>> import pandas as pd 
>>> pd.__version__ 
u'0.18.0' 
>>> die = lambda x: 0/0 

>>> s = pd.Series(zip(range(5), range(5))) 
>>> s 
0 (0, 0) 
1 (1, 1) 
2 (2, 2) 
3 (3, 3) 
4 (4, 4) 
dtype: object 

एक साधारण apply काम करता है के रूप में की उम्मीद, कि में समारोह कहा जाता है:

>>> s.apply(die) 
[...] 
ZeroDivisionError: integer division or modulo by zero 

लेकिन लेकिन एक rolling().apply() कुछ भी नहीं करता है, और विशेष रूप से समारोह है कि कभी नहीं लागू किया जा माना जाता है कहा जाता हो जाता है:

>>> s.rolling(2).apply(die) 
0 (0, 0) 
1 (1, 1) 
2 (2, 2) 
3 (3, 3) 
4 (4, 4) 
dtype: object 

यह सबसे सरल उदाहरण यह दर्शाता है कि मैं किस बारे में बात कर रहा हूँ है, लेकिन एक ही चीज सेट & सूचियों के साथ होती है।

ऐसा क्यों होता है, और मैं संग्रह की श्रृंखला पर एक कस्टम फ़ंक्शन के साथ रोलिंग कैसे लागू कर सकता हूं?

+2

मुझे लगता है कि रोलिंग() लागू करें() और विस्तार()। लागू करें() वस्तुओं के लिए लागू नहीं किए गए हैं। मैंने कुछ घंटों पहले http://stackoverflow.com/q/36717416/2285236 पर एक समान प्रश्न पूछा – ayhan

उत्तर

0

इसका कारण यह है pandas.DataFrame.rolling फ़ंक्शन एक खिड़की या रोलिंग काम नहीं करेगा विशेष ऑपरेशन के लिए उप-वर्गीकृत जबकि pandas.DataFrame.applyDataFrame के इनपुट अक्ष के साथ समारोह लागू होता है। जैसा कि आयन द्वारा उल्लेख किया गया है, this पोस्ट में।

संबंधित मुद्दे