将特定列移动到数据框中特定列之前/之后

数据挖掘 Python 熊猫 数据清理
2022-03-05 16:28:36

在数据框示例中:

  medcine_preg_oth medcine_preg_oth1 medcine_preg_oth2 medcine_preg_oth3
0          Berplex           Berplex              None              None
1              NaN               NaN               NaN               NaN
2              NaN               NaN               NaN               NaN
3            obmin             obmin              None              None
4              NaN               NaN               NaN               NaN

'medcine_preg_oth1' 'medcine_preg_oth2' 'medcine_preg_oth3' ,这三列与其他列位于数据框的某个位置。

我想将这三个:medcine_preg_oth1 medcine_preg_oth2 medcine_preg_oth3 转移到“medcine_preg_oth”之后的位置。

我的想法是将特定列转移到数据框中特定列之后/之前,以实现更广泛的目的。请建议我!谢谢

3个回答

如果我的问题正确,您只需要更改列的顺序。这可以通过将列的新顺序重新分配给数据框来简单地完成。

例如:

#['a', 'b', 'c'] <-given columns order
df = df[['c', 'b', 'a']]

您还可以使用内置功能reindex来完成您的任务,如下所示:

cols = df.columns.tolist() #['a', 'b', 'c']
new_cols = [['c', 'b', 'a']]
df = df.reindex(columns=new_cols)

编辑:

如果您有大量列,那么问题将出现在如何获取new_cols列表上。为此,您可以使用列表索引和切片。首先使用以下方法获取要替换的列的索引:

df.columns.get_loc("b") #1

现在假设您有 699 列,并且想要将第 100 列和第 200 列放在第 7 列之后,您可以这样做:

cols = cols[0:7] + [cols[100]] + [cols[200]] + cols[8:100] + cols[101:200] + cols[201:]

您现在可以使用此列以上述方式更改列的顺序。表达式将根据您的用例而有所不同。

获取列索引,该列之前的位置。

x=df.columns.get_loc('col')

如果列是倍数并且它们在序列索引列中,则要移动或移动的列列表。

var_list=new_var

new_position = x
for var in var_list:
    cols = df.columns.tolist()
    column_to_move = var
    new_position += 1
    cols.insert(new_position, cols.pop(cols.index(column_to_move)))
    df = df[cols]

因为您知道所需列的名称,所以只需将它们拉到前面并将所有其他列原样放在目标列之后即可。

获取您关心的列名:

desired_cols = ['medcine_preg_oth1' 'medcine_preg_oth2' 'medcine_preg_oth3']

现在获取所有列名并删除您关心的那些,所以我们只剩下其余的了。有几种方法可以做到这一点,但我喜欢套装......

all_cols = set(df.columns)    # get the column names
other_cols = all_cols.difference(desired_cols)    # ones you don't care about

现在我们只需要重新排列所有列,以便您想要的列位于开头:

tidy_cols = list(desired_cols) + list(other_cols)
tidy_df = df[tidy_cols]

我还要说这通常不是一个重要的操作,因为它仅在打印数据框时才有帮助。否则,所有列仍可按您需要的名称使用。