猿问

如何对前 n 个数据框列重新排序,并在末尾添加剩余的列?

不可预测的格式df:


  First Name  number last_name

0    Cthulhu     666     Smith

    

df = pd.DataFrame({'First Name': ['Cthulhu'], 'number': [666], 'last_name': ['Smith']})

这需要放入列名称和顺序中:TemplateColumns = ['First Name', 'other', 'number']。如果列不存在,可以创建它们:


for col in TemplateColumns:

    if col not in df:

        df[col] = np.nan

这使:


  First Name  number last_name  other

0    Cthulhu     666     Smith    NaN

初始列需要与 一样排序TemplateColumns,将剩余列留在最后,以获得desired_df:


  First Name  other   number last_name

0    Cthulhu    NaN      666     Smith


desired_df = pd.DataFrame({'First Name': ['Cthulhu'], 'other': [np.nan], 'number': [666], 'last_name': ['Smith']})

重新排序列在其他帖子中得到了很好的解释,但我不知道如何对前 n 列进行排序并将其余的保留在最后。我怎样才能做到这一点?


撒科打诨
浏览 130回答 3
3回答

MYYA

尝试这个cols = TemplateColumns + df.columns.difference(TemplateColumns, sort=False).tolist()df_final =  df.reindex(cols, axis=1)Out[714]:  First Name  other  number last_name0    Cthulhu    NaN     666     Smith

白衣非少年

您可以编写自己的函数来实现此目的。本质上,您可以用来.reindex()对数据框重新排序,同时包含空列(如果它们不存在)。唯一需要弄清楚的剩余部分是如何将剩余的列添加到TemplateColumns数据框中。您可以通过获取列索引的设置差异来完成此操作,然后TemplateColumns在调用之前更新订单.reindex设置数据和功能def reordered(df, new_order, include_remaining=True):    cols_to_end = []    if include_remaining:        # gets the items in `df.columns` that are NOT in `new_order`         cols_to_end = df.columns.difference(new_order, sort=False)        # Ensures that the new_order items are first    final_order = new_order + list(cols_to_end)    return df.reindex(columns=final_order)df = pd.DataFrame({'First Name': ['Cthulhu'], 'number': [666], 'last_name': ['Smith']})new_order = ['First Name', 'other', 'number']和include_remaining:out = reordered(df, new_order, include_remaining=True)print(out)  First Name  other  number last_name0    Cthulhu    NaN     666     Smith没有include_remaining:out = reordered(df, new_order, include_remaining=False)print(out)  First Name  other  number0    Cthulhu    NaN     666

PIPIONE

insert像这样使用:for col in TemplateColumns:    if col not in df:        df.insert(1, col, np.nan)
随时随地看视频慕课网APP

相关分类

Python
我要回答