एक कॉलम से पांडा डेटाफ्रेम कैसे सॉर्ट करें


285

मेरा डेटा फ्रेम इस तरह है:

print(df)

        0          1     2
0   354.7      April   4.0
1    55.4     August   8.0
2   176.5   December  12.0
3    95.5   February   2.0
4    85.6    January   1.0
5     152       July   7.0
6   238.7       June   6.0
7   104.8      March   3.0
8   283.5        May   5.0
9   278.8   November  11.0
10  249.6    October  10.0
11  212.7  September   9.0

जैसा कि आप देख सकते हैं, महीने कैलेंडर क्रम में नहीं हैं। इसलिए मैंने प्रत्येक महीने (1-12) के अनुरूप महीने की संख्या प्राप्त करने के लिए एक दूसरा कॉलम बनाया। वहां से, मैं कैलेंडर महीनों के आदेश के अनुसार इस डेटा फ़्रेम को कैसे सॉर्ट कर सकता हूं?

जवाबों:


384

sort_valuesकिसी विशिष्ट कॉलम के मानों को df सॉर्ट करने के लिए उपयोग करें :

In [18]:
df.sort_values('2')

Out[18]:
        0          1     2
4    85.6    January   1.0
3    95.5   February   2.0
7   104.8      March   3.0
0   354.7      April   4.0
8   283.5        May   5.0
6   238.7       June   6.0
5   152.0       July   7.0
1    55.4     August   8.0
11  212.7  September   9.0
10  249.6    October  10.0
9   278.8   November  11.0
2   176.5   December  12.0

यदि आप दो कॉलमों को क्रमबद्ध करना चाहते हैं, तो कॉलम लेबल की सूची sort_valuesको क्रमबद्ध प्राथमिकता के अनुसार दिए गए कॉलम लेबल के साथ पास करें। यदि आप उपयोग करते हैं df.sort_values(['2', '0']), तो परिणाम कॉलम और 2फिर कॉलम द्वारा क्रमबद्ध किया जाएगा 0। दी, यह वास्तव में इस उदाहरण के लिए कोई मतलब नहीं है क्योंकि प्रत्येक मूल्य df['2']अद्वितीय है।


उपरोक्त समाधान मेरे लिए काम नहीं कर रहा है। इसे नीचे दिए गए उत्तर के अनुसार बदला जाना चाहिए।
नफीस अहमद

2
@NafeesAhmad ओपी आरोही क्रम में परिणाम चाहता था जो अन्य उत्तर के लिए अलग है
EdChum

102

मैंने ऊपर दिए गए समाधानों की कोशिश की और मुझे परिणाम प्राप्त नहीं हुए, इसलिए मुझे एक अलग समाधान मिला जो मेरे लिए काम करता है। आरोही = झूठी में dataframe ऑर्डर करने के लिए है अवरोही क्रम में, डिफ़ॉल्ट रूप से यह सच है । मैं अजगर 3.6.6 और पांडा 0.23.4 संस्करणों का उपयोग कर रहा हूं।

final_df = df.sort_values(by=['2'], ascending=False)

आप यहां पंडों के प्रलेखन में अधिक विवरण देख सकते हैं ।


11

बस एक और उपाय के रूप में:

दूसरा कॉलम बनाने के बजाय , आप अपने स्ट्रिंग डेटा (महीने का नाम) को श्रेणीबद्ध कर सकते हैं और इस तरह से छांट सकते हैं:

df.rename(columns={1:'month'},inplace=True)
df['month'] = pd.Categorical(df['month'],categories=['December','November','October','September','August','July','June','May','April','March','February','January'],ordered=True)
df = df.sort_values('month',ascending=False)

यह आपको ऑब्जेक्ट month nameबनाते समय आपके द्वारा निर्दिष्ट डेटा देगा Categorical


10

कॉलम नाम का उपयोग करना मेरे लिए काम कर गया।

sorted_df = df.sort_values(by=['Column_name'], ascending=True)

9

बस डेटा पर कुछ और संचालन जोड़ना। मान लीजिए कि हमारे पास एक डेटाफ्रेम है df, हम वांछित आउटपुट प्राप्त करने के लिए कई ऑपरेशन कर सकते हैं

ID         cost      tax    label
1       216590      1600    test      
2       523213      1800    test 
3          250      1500    experiment

(df['label'].value_counts().to_frame().reset_index()).sort_values('label', ascending=False)

sortedएक के रूप में लेबल का उत्पादन दे देंगेdataframe

    index   label
0   test        2
1   experiment  1

2

यहाँ पंडों के प्रलेखन के अनुसार Sort_values ​​का टेम्प्लेट है।

DataFrame.sort_values(by, axis=0,
                          ascending=True,
                          inplace=False,
                          kind='quicksort',
                          na_position='last',
                          ignore_index=False, key=None)[source]

इस मामले में यह इस तरह होगा।

df.sort_values(by=['2'])

API संदर्भ pandas.DataFrame.sort_values

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.