मैं इस समाधान को पसंद करता हूं:
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
त्रुटि हुई कि जब एक ही कॉलम दो बार था, तो समूह बनाने की कोशिश कर रहा था।