2013-06-10 26 views
7

के आधार पर के रूप में इस प्रकार है, जहां ईद एक स्ट्रिंग है और दिनांक एक दिनांक है मैं एक DataFrame है:पांडा सकल/समूह द्वारा हाल ही में की तारीख

Id Date 
1  3-1-2012 
1  4-8-2013 
2  1-17-2013 
2  5-4-2013 
2  10-30-2012 
3  1-3-2013 

मैं तालिका को मजबूत करना चाहते हैं सिर्फ एक को दिखाने के लिए प्रत्येक आईडी के लिए पंक्ति जिसमें सबसे हाल की तारीख है।
यह कैसे करें इस पर कोई विचार?

+0

वे तिथि सबमिट की गई तारीख का प्रतिनिधित्व करते हैं, मुझे केवल हाल ही में सबमिट की जाने वाली आवश्यकता है क्योंकि यह पुरानी पंक्तियों को पार करता है। – ChrisArmstrong

उत्तर

5

आप ईद क्षेत्र groupby कर सकते हैं:

In [11]: df 
Out[11]: 
    Id    Date 
0 1 2012-03-01 00:00:00 
1 1 2013-04-08 00:00:00 
2 2 2013-01-17 00:00:00 
3 2 2013-05-04 00:00:00 
4 2 2012-10-30 00:00:00 
5 3 2013-01-03 00:00:00 

In [12]: g = df.groupby('Id') 

आप आदेश देने के बारे में निश्चित नहीं हैं, तो आप पंक्तियों के साथ कुछ कर सकते हैं:

In [13]: g.agg(lambda x: x.iloc[x.Date.argmax()]) 
Out[13]: 
        Date 
Id 
1 2013-04-08 00:00:00 
2 2013-05-04 00:00:00 
3 2013-01-03 00:00:00 

जो प्रत्येक समूह के लिए पंक्ति पकड़ लेता है सबसे बड़ी (नवीनतम) तिथि (Argmax भाग) के साथ।

आप पता था कि अगर वे आपको पिछले (या पहले) प्रविष्टि ले सकता है में थे:

In [14]: g.last() 
Out[14]: 
        Date 
Id 
1 2013-04-08 00:00:00 
2 2012-10-30 00:00:00 
3 2013-01-03 00:00:00 

(नोट: वे क्रम में नहीं कर रहे हैं, तो यह इस मामले में काम नहीं करता है!)

0

हेडन प्रतिक्रिया में, मुझे लगता है कि x.iloc की जगह x.loc का उपयोग करना बेहतर है, क्योंकि डीएफ डेटाफ्रेम की अनुक्रमणिका स्पैस हो सकती है (और इस मामले में iloc काम नहीं करेगा)।

(मैंने प्रतिक्रिया की टिप्पणियों में इसे पोस्ट करने के लिए स्टैक ओवरफ्लो पर अंक नहीं खरीदे हैं)।

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