ধরুন আমি কলাম সহ একটি dataframe আছে a, bএবং cআমি কলাম দ্বারা dataframe সাজাতে চান bঅর্ডার আরোহী, এবং কলাম দ্বারা cঅবরোহী, আমি এই কিভাবে করব?
ধরুন আমি কলাম সহ একটি dataframe আছে a, bএবং cআমি কলাম দ্বারা dataframe সাজাতে চান bঅর্ডার আরোহী, এবং কলাম দ্বারা cঅবরোহী, আমি এই কিভাবে করব?
উত্তর:
০.০7.০ মুক্তির হিসাবে, sortপদ্ধতিটির পক্ষে অবহেলা করা হয়েছিল sort_values। sort0.20.0 প্রকাশে সম্পূর্ণ অপসারণ করা হয়েছিল। যুক্তি (এবং ফলাফল) একই থাকে:
df.sort_values(['a', 'b'], ascending=[True, False])
আপনি এর আরোহী যুক্তি ব্যবহার করতে পারেন sort:
df.sort(['a', 'b'], ascending=[True, False])
উদাহরণ স্বরূপ:
In [11]: df1 = pd.DataFrame(np.random.randint(1, 5, (10,2)), columns=['a','b'])
In [12]: df1.sort(['a', 'b'], ascending=[True, False])
Out[12]:
a b
2 1 4
7 1 3
1 1 2
3 1 2
4 3 2
6 4 4
0 4 3
9 4 3
5 4 1
8 4 1
হিসাবে মন্তব্য করেছেন @renadeen
ডিফল্ট অনুসারে বাছাই করা যায় না! সুতরাং আপনার বাছাইয়ের জন্য বাছাই পদ্ধতিটির ফলাফল নির্ধারণ করা উচিত বা insert = true to পদ্ধতি কল করতে হবে।
এটি হ'ল যদি আপনি df1 কে একটি সাজানো ডেটা ফ্রেম হিসাবে পুনরায় ব্যবহার করতে চান:
df1 = df1.sort(['a', 'b'], ascending=[True, False])
অথবা
df1.sort(['a', 'b'], ascending=[True, False], inplace=True)
sortপদ্ধতির ফলাফলটি একটি পরিবর্তনশীলকে নির্ধারণ করা উচিত বা inplace=Trueপদ্ধতি কলটিতে যুক্ত করা উচিত।
পান্ডাস ০.০7.০.০ হিসাবে, অবহিত DataFrame.sort()করা হয়েছে এবং পান্ডার ভবিষ্যতের সংস্করণে মুছে ফেলা হবে। ডেটাফ্রেমের মানগুলি অনুসারে বাছাই করার উপায়টি এখনDataFrame.sort_values
যেমন, আপনার প্রশ্নের উত্তর এখন হবে
df.sort_values(['b', 'c'], ascending=[True, False], inplace=True)
সংখ্যাসূচক তথ্যগুলির বৃহত ডেটাফ্রেমগুলির জন্য, আপনি এর মাধ্যমে একটি গুরুত্বপূর্ণ পারফরম্যান্স উন্নতি দেখতে পাবেন numpy.lexsort, যা কীগুলির ক্রম ব্যবহার করে একটি পরোক্ষ বাছাই করে:
import pandas as pd
import numpy as np
np.random.seed(0)
df1 = pd.DataFrame(np.random.randint(1, 5, (10,2)), columns=['a','b'])
df1 = pd.concat([df1]*100000)
def pdsort(df1):
return df1.sort_values(['a', 'b'], ascending=[True, False])
def lex(df1):
arr = df1.values
return pd.DataFrame(arr[np.lexsort((-arr[:, 1], arr[:, 0]))])
assert (pdsort(df1).values == lex(df1).values).all()
%timeit pdsort(df1) # 193 ms per loop
%timeit lex(df1) # 143 ms per loop
একটি অদ্ভুততা হল সংজ্ঞায়িত বাছাইয়ের numpy.lexsortক্রমটি বিপরীত: প্রথমে (-'b', 'a')সিরিজ অনুসারে বাছাই করা a। আমরা ধারাবাহিকটিকে bপ্রতিফলিত করতে প্রত্যাখ্যান করি আমরা এই সিরিজটিকে অবতরণ ক্রমে চাই want
সচেতন থাকুন যে np.lexsortকেবল সংখ্যাসূচক মানগুলির সাথে বাছাই করুন, তবে pd.DataFrame.sort_valuesস্ট্রিং বা সংখ্যাসূচক মানগুলির সাথে কাজ করে। ব্যবহার np.lexsortস্ট্রিং সঙ্গে দিতে হবে: TypeError: bad operand type for unary -: 'str'।