আমি এই সমাধানটি পছন্দ করি:
col = df.pop("Mid")
df.insert(0, col.name, col)
এটি পড়ার জন্য সহজ এবং অন্যান্য প্রস্তাবিত উত্তরের চেয়ে দ্রুত।
def move_column_inplace(df, col, pos):
col = df.pop(col)
df.insert(pos, col.name, col)
কর্মক্ষমতা মূল্যায়ন:
এই পরীক্ষার জন্য, বর্তমানে সর্বশেষ কলামটি প্রতিটি পুনরাবৃত্তির সম্মুখভাগে সরানো হয়েছে। ইন-প্লেস পদ্ধতিগুলি সাধারণত আরও ভাল সম্পাদন করে। যদিও সিটিএনরম্যানের সমাধানটি স্থানে তৈরি করা যায়, এড .loc
চামের পদ্ধতি ভিত্তিক এবং সাচিন্মের পদ্ধতিটি reindex
পারবেন না এর ভিত্তিতে ।
অন্য পদ্ধতিগুলি জেনেরিক হলেও সিটিএনরম্যানের সমাধান সীমাবদ্ধ pos=0
। আমি df.loc[cols]
এবং এর মধ্যে কোনও পারফরম্যান্সের পার্থক্য পর্যবেক্ষণ করি নি df[cols]
, এজন্য আমি কিছু অন্যান্য পরামর্শ অন্তর্ভুক্ত করি নি।
আমি একটি ম্যাকবুক প্রো (মধ্য 2015) তে অজগর 3.6.8 এবং পান্ডাস 0.24.2 দিয়ে পরীক্ষা করেছি।
import numpy as np
import pandas as pd
n_cols = 11
df = pd.DataFrame(np.random.randn(200000, n_cols),
columns=range(n_cols))
def move_column_inplace(df, col, pos):
col = df.pop(col)
df.insert(pos, col.name, col)
def move_to_front_normanius_inplace(df, col):
move_column_inplace(df, col, 0)
return df
def move_to_front_chum(df, col):
cols = list(df)
cols.insert(0, cols.pop(cols.index(col)))
return df.loc[:, cols]
def move_to_front_chum_inplace(df, col):
col = df[col]
df.drop(col.name, axis=1, inplace=True)
df.insert(0, col.name, col)
return df
def move_to_front_elpastor(df, col):
cols = [col] + [ c for c in df.columns if c!=col ]
return df[cols]
def move_to_front_sachinmm(df, col):
cols = df.columns.tolist()
cols.insert(0, cols.pop(cols.index(col)))
df = df.reindex(columns=cols, copy=False)
return df
def move_to_front_citynorman_inplace(df, col):
df.set_index(col, inplace=True)
df.reset_index(inplace=True)
return df
def test(method, df):
col = np.random.randint(0, n_cols)
method(df, col)
col = np.random.randint(0, n_cols)
ret_mine = move_to_front_normanius_inplace(df.copy(), col)
ret_chum1 = move_to_front_chum(df.copy(), col)
ret_chum2 = move_to_front_chum_inplace(df.copy(), col)
ret_elpas = move_to_front_elpastor(df.copy(), col)
ret_sach = move_to_front_sachinmm(df.copy(), col)
ret_city = move_to_front_citynorman_inplace(df.copy(), col)
assert(ret_mine.equals(ret_chum1))
assert(ret_mine.equals(ret_chum2))
assert(ret_mine.equals(ret_elpas))
assert(ret_mine.equals(ret_sach))
assert(ret_mine.equals(ret_city))
ফলাফল :
%timeit test(move_to_front_normanius_inplace, df)
%timeit test(move_to_front_citynorman_inplace, df)
%timeit test(move_to_front_sachinmm, df)
%timeit test(move_to_front_chum, df)
%timeit test(move_to_front_elpastor, df)
%timeit test(move_to_front_chum_inplace, df)
%timeit test(move_to_front_normanius_inplace, df)
%timeit test(move_to_front_citynorman_inplace, df)
%timeit test(move_to_front_sachinmm, df)
%timeit test(move_to_front_chum, df)
%timeit test(move_to_front_elpastor, df)
%timeit test(move_to_front_chum_inplace, df)
Mid
ওZscore
মূল অবস্থান থেকে কলাম থেকে।Grouper
একই কলামটি যখন দু'বার সেখানে ছিল তখন আমি গ্রুপপাইয়ের চেষ্টা করার সময় একটি ত্রুটি সহ এটি খুঁজে পেয়েছি ।