pandas dataframe - 按字符串过滤/选择列是否保留顺序?

pandas dataframe - does filtering / selecting cols by String preserve order?

我有一个用例,其中有 10 列,其中 5 列以字符串 'Region' 开头。我需要得到一个只包含那些列的结果数据框(以字符串 'Region' 开头)。不仅如此,我还需要确保保留顺序(例如,如果在原始 df 中,col 顺序是 'Region 1', 'Region 2', 'Region 3'——这应该保留,而不是导致 'Region 3', 'Region 2', 'Region 1')。

这个问题的 'accepted answer' 是否会保留顺序,还是有其他方法可以实现?

Whosebug - find-column-whose-name-contains-a-specific-string

是的,会的。 df.columns 是一个列表,当你遍历列表时,你保留了列表的顺序。因此,您可以使用上述 link:

中的答案
region_cols = [col for col in df.columns if 'Region' in col]

df[region_cols] - 将是您需要的 df。

两步先用filter

s=df.filter(like='Region')

如果您的数据框类似于:

print(df)


   Region 3  Region 2  Region 1  Custom  UnwantedCol
0         0         0         0       0            0

我们可以使用 sorted 方法按数字对您的列进行排序:

nat_cols_sort = dict(sorted(
    {col: int(col.split(" ")[1]) for col in df.filter(regex='^Region').columns}.items(),
    key=lambda x: x[1],
))


print(df[nat_sort.keys()])

   Region 1  Region 2  Region 3
0         0         0         0