2012-09-10 18 views
20

मैं अंतिम पंक्ति के मानों के अनुसार कॉलम कैसे ऑर्डर करूं? नीचे दिए गए उदाहरण में, मेरे अंतिम डीएफ में निम्नलिखित क्रम में कॉलम होंगे: 'ddd' 'aaa' 'ppp' 'fff'।पाइथन पांडा ऑर्डर कॉलम पंक्तियों के अनुसार

>>> df = DataFrame(np.random.randn(10, 4), columns=['ddd', 'fff', 'aaa', 'ppp']) 
>>> df 
     ddd  fff  aaa  ppp 
0 -0.177438 0.102561 -1.318710 1.321252 
1 0.980348 0.786721 0.374506 -1.411019 
2 0.405112 0.514216 1.761983 -0.529482 
3 1.659710 -1.017048 -0.737615 -0.388145 
4 -0.472223 1.407655 -0.129119 -0.912974 
5 1.221324 -0.656599 0.563152 -0.900710 
6 -1.816420 -2.898094 -0.232047 -0.648904 
7 2.793261 0.568760 -0.850100 0.654704 
8 -2.180891 2.054178 -1.050897 -1.461458 
9 -1.123756 1.245987 -0.239863 0.359759 

उत्तर

22

tl [को आसान बनाने के लिए अद्यतन]; डॉ:

In [29]: new_columns = df.columns[df.ix[df.last_valid_index()].argsort()] 

In [30]: df[new_columns] 
Out[30]: 
     aaa  ppp  fff  ddd 
0 0.328281 0.375458 1.188905 0.503059 
1 0.305457 0.186163 0.077681 -0.543215 
2 0.684265 0.681724 0.210636 -0.532685 
3 -1.134292 1.832272 0.067946 0.250131 
4 -0.834393 0.010211 0.649963 -0.551448 
5 -1.032405 -0.749949 0.442398 1.274599 

कुछ स्पष्टीकरण इस प्रकार है। सबसे पहले, निर्माण DataFrame:

In [24]: df = pd.DataFrame(np.random.randn(6, 4), columns=['ddd', 'fff', 'aaa', 'ppp']) 

In [25]: df 
Out[25]: 
     ddd  fff  aaa  ppp 
0 0.503059 1.188905 0.328281 0.375458 
1 -0.543215 0.077681 0.305457 0.186163 
2 -0.532685 0.210636 0.684265 0.681724 
3 0.250131 0.067946 -1.134292 1.832272 
4 -0.551448 0.649963 -0.834393 0.010211 
5 1.274599 0.442398 -1.032405 -0.749949 

अंतिम पंक्ति प्राप्त करें:

In [28]: df[last_row.argsort()] 
Out[28]: 
     aaa  ppp  fff  ddd 
0 0.328281 0.375458 1.188905 0.503059 
1 0.305457 0.186163 0.077681 -0.543215 
2 0.684265 0.681724 0.210636 -0.532685 
3 -1.134292 1.832272 0.067946 0.250131 
4 -0.834393 0.010211 0.649963 -0.551448 
5 -1.032405 -0.749949 0.442398 1.274599 
: सूचकांक df को

In [27]: last_row.argsort() 
Out[27]: 
ddd 2 
fff 3 
aaa 1 
ppp 0 
Name: 5, Dtype: int32 

इस का उपयोग करें:

In [26]: last_row = df.ix[df.last_valid_index()] 

सूचकांक कि यह सॉर्ट होगा जाओ

लाभ!

1

मैं पक्षांतरित और प्रकार विधि (जिसमें कॉलम पर काम करता है) का प्रयोग करेंगे:

df = pd.DataFrame(np.random.randn(10, 4), columns=['ddd', 'fff', 'aaa', 'ppp']) 
last_row_name = df.index[-1] 
sorted_df = df.T.sort(columns=last_row_name).T 

आप एक प्रदर्शन हिट सामना करना पड़ सकता है, लेकिन यह त्वरित और आसान है।

5

sort_values विधि axis=1 तर्क देने पर यह सीधे करता है।

sorted_df = df.sort_values(df.last_valid_index(), axis=1) 

तो, यह अब एक पंक्ति से सॉर्ट करने के dataframe स्थानांतरित करने के लिए आवश्यक है। इसके अलावा, sort विधि अब बहिष्कृत है।

-1
df=df[df.iloc[-1,:].sort_values().index] 

यह काम करता है

+8

कोड केवल जवाब नहीं कर रहे हैं के लिए प्रोत्साहित के रूप में वे न भविष्य पाठकों के लिए जानकारी उपलब्ध करानी क्या आप – WhatsThePoint

+0

@WhatsThePoint लिखा है करने के लिए कुछ विवरण दें: मेरी तरफ से +1। हुसिमू: कृपया स्पष्ट उत्तर के साथ अपना उत्तर दें। कोड न लिखें, आपके द्वारा साझा किए गए कोड के बारे में स्पष्टीकरण दें, ताकि अन्य लोग भी समझ सकें और यह सहायक होगा। मैं आपको प्रभावी तरीके से स्टैक ओवरफ़्लो का उपयोग करने के लिए एफएक्यू अनुभाग में पढ़ने के लिए अनुरोध करता हूं। –

+1

कृपया बताएं कि यह क्यों काम करता है। – Matt

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