পান্ডাস বাছাই 101
sort
v0.20 দ্বারা DataFrame.sort_values
এবং দ্বারা প্রতিস্থাপিত হয়েছে DataFrame.sort_index
। এটি বাদ দিয়ে আমাদেরও আছে argsort
।
বাছাইয়ের ক্ষেত্রে কয়েকটি সাধারণ ব্যবহারের কেস এবং বর্তমান এপিআইতে বাছাই করা ফাংশনগুলি ব্যবহার করে কীভাবে তাদের সমাধান করবেন। প্রথমে সেটআপ।
# Setup
np.random.seed(0)
df = pd.DataFrame({'A': list('accab'), 'B': np.random.choice(10, 5)})
df
A B
0 a 7
1 c 9
2 c 3
3 a 5
4 b 2
একক কলাম অনুসারে বাছাই করুন
উদাহরণস্বরূপ, df
কলাম "এ" অনুসারে বাছাই করতে , sort_values
একক কলামের নাম ব্যবহার করুন:
df.sort_values(by='A')
A B
0 a 7
3 a 5
4 b 2
1 c 9
2 c 3
আপনার যদি সতেজ রেঞ্জইন্ডেক্স প্রয়োজন হয় তবে ব্যবহার করুন DataFrame.reset_index
।
একাধিক কলাম অনুসারে বাছাই করুন
উদাহরণস্বরূপ, উভয় কর্নেল "এ" এবং "বি" অনুসারে বাছাই df
করতে, আপনি এখানে একটি তালিকা পাস করতে পারেন sort_values
:
df.sort_values(by=['A', 'B'])
A B
3 a 5
0 a 7
4 b 2
2 c 3
1 c 9
ডেটাফ্রেম সূচক অনুসারে বাছাই করুন
df2 = df.sample(frac=1)
df2
A B
1 c 9
0 a 7
2 c 3
3 a 5
4 b 2
আপনি এটি ব্যবহার করে এটি করতে পারেন sort_index
:
df2.sort_index()
A B
0 a 7
1 c 9
2 c 3
3 a 5
4 b 2
df.equals(df2)
# False
df.equals(df2.sort_index())
# True
এখানে তাদের পারফরম্যান্সের সাথে তুলনামূলক কিছু পদ্ধতি রয়েছে:
%timeit df2.sort_index()
%timeit df2.iloc[df2.index.argsort()]
%timeit df2.reindex(np.sort(df2.index))
605 µs ± 13.6 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
610 µs ± 24.2 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
581 µs ± 7.63 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
সূচকের তালিকা অনুসারে বাছাই করুন
উদাহরণ স্বরূপ,
idx = df2.index.argsort()
idx
# array([0, 7, 2, 3, 9, 4, 5, 6, 8, 1])
এই "বাছাই" সমস্যাটি আসলে একটি সাধারণ সূচিকর্মের সমস্যা। কেবল পূর্ণসংখ্যা লেবেলগুলি পাস করার জন্য iloc
।
df.iloc[idx]
A B
1 c 9
0 a 7
2 c 3
3 a 5
4 b 2