2013-06-07 18 views
19

में दो अन्य श्रृंखलाओं से एक तत्व-वार न्यूनतम श्रृंखला बनाना मुझे पांडा में दो श्रृंखला ऑब्जेक्ट्स के कुशल तत्व-वार के लिए एक तरीका खोजने में परेशानी हो रही है। उदाहरण के लिए मैं दो सीरीज आसानी से पर्याप्त जोड़ सकते हैं:पायथन पांडस

In [1]: 
import pandas as pd 
s1 = pd.Series(data=[1,1,1], index=[1,2,3]) 
s2 = pd.Series(data=[1,2,2,1], index=[1,2,3,4]) 
s1.add(s2)  
Out[1]: 
1  2 
2  3 
3  3 
4 NaN 
dtype: float64 

लेकिन मैं (सूचकांक संरेखित और NaN मूल्यों से निपटने के साथ) दो सीरीज के बीच एक तत्व के लिहाज से कम से कम करने के लिए एक कारगर तरीका नहीं मिल रहा।

कभी नहीं। वहाँ गठबंधन समारोह के साथ तो अब बचने का है तो आप किसी भी तत्व के लिहाज से समारोह में डाल कर सकते हैं:

In [2]: 
s1 = pd.Series(data=[1,1,1], index=[1,2,3]) 
s2 = pd.Series(data=[1,2,2,1], index=[1,2,3,4]) 
s1.combine(s2, min, 0) 
Out[2]: 
1 1 
2 1 
3 1 
4 0 
dtype: int64 
+4

मैं तुम्हें बिट के बाद "कोई बात नहीं" एक उत्तर के रूप में है, बजाय प्रश्न के अंत में (मैं वोट दें चाहते हैं) जोड़ना चाहिए ... हालांकि मैं इससे सहमत नहीं है कि 'मिनट (1 लगता है, NaN) == 0' .... –

उत्तर

17

सबसे सीधा रास्ता मैं देख सकता हूँ उन्हें एक DataFrame में बनाने के लिए और उसके बाद पंक्ति-वार मिनट लेते हैं :

>>> print pandas.concat([s1, s2], axis=1).min(axis=1) 
1 1 
2 1 
3 1 
4 1 
dtype: float64 
+1

पांडा पर 0.1 9.2 यह –

16

एक अन्य समान तरीके:

In [11]: pd.DataFrame([s1, s2]).min() 
Out[11]: 
1 1 
2 1 
3 1 
4 1 
dtype: float64 
+3

परिमाण के तीन से अधिक आदेशों से अन्य तरीकों से तेज़ है, यदि यह 'min (axis = 1) 'कॉल करता है तो यह केवल मेरे लिए पांडा 0.17 पर काम करता है। – ihadanny

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