मैं एक एसक्यूएल पृष्ठभूमि से आते हैं और मैं अक्सर निम्नलिखित डाटा प्रोसेसिंग कदम का उपयोग करें:SQL जैसी पांडा में खिड़की कार्य: अजगर पांडा Dataframe में पंक्ति क्रमांकन
- विभाजन एक या अधिक फ़ील्ड करके डेटा की तालिका
- प्रत्येक विभाजन के लिए, अपने पंक्तियों में से प्रत्येक के लिए एक rownumber कि जहां विश्लेषक बढ़ते या घटते निर्दिष्ट करता है एक या अधिक अन्य क्षेत्रों से पंक्ति में शुमार जोड़ने
पूर्व:
df = pd.DataFrame({'key1' : ['a','a','a','b','a'],
'data1' : [1,2,2,3,3],
'data2' : [1,10,2,3,30]})
df
data1 data2 key1
0 1 1 a
1 2 10 a
2 2 2 a
3 3 3 b
4 3 30 a
मैं कैसे इस एसक्यूएल खिड़की कार्य करने के लिए पांडा बराबर करने के लिए देख रहा हूँ:
RN = ROW_NUMBER() OVER (PARTITION BY Key1, Key2 ORDER BY Data1 ASC, Data2 DESC)
data1 data2 key1 RN
0 1 1 a 1
1 2 10 a 2
2 2 2 a 3
3 3 3 b 1
4 3 30 a 4
मैं काम करने के लिए जहां कोई 'विभाजन' देखते हैं जिसके बाद मैं मिल गया है की कोशिश की है:
def row_number(frame,orderby_columns, orderby_direction,name):
frame.sort_index(by = orderby_columns, ascending = orderby_direction, inplace = True)
frame[name] = list(xrange(len(frame.index)))
मैं इस विचार का विस्तार करने के विभाजन (पांडा में समूहों) के साथ काम करने की कोशिश की लेकिन निम्नलिखित काम नहीं किया:
df1 = df.groupby('key1').apply(lambda t: t.sort_index(by=['data1', 'data2'], ascending=[True, False], inplace = True)).reset_index()
def nf(x):
x['rn'] = list(xrange(len(x.index)))
df1['rn1'] = df1.groupby('key1').apply(nf)
लेकिन जब मैं ऐसा करता हूं तो मुझे बहुत सारे NaNs मिलते हैं।
आदर्श रूप से, एसक्यूएल की विंडो फ़ंक्शन क्षमता को दोहराने के लिए एक संक्षिप्त तरीका होगा (मैंने खिड़की आधारित समेकित निकाला है ... यह पांडा में एक लाइनर है) ... क्या कोई मेरे साथ साझा कर सकता है पांडास में इस तरह की पंक्तियों की संख्या के लिए सबसे बेवकूफ तरीका?
के लिए पांडा रैंक विधि पर एक नज़र डालें है आप की तरह लगता है चाहिए करने के लिए 'सक्षम होने के लिए एकाधिक कॉलम द्वारा .rank' ... –