pandas数据框架--通过字符串过滤选择列是否能保留顺序?

问题描述 投票:0回答:1

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

在这个问题上,是否可以按照 "公认的答案 "来保存顺序,或者有其他方法来实现?

stackoverflow - find-column-whoose-name-contains-a-specific-string(列名包含一个特定的字符串)。

python pandas string dataframe contains
1个回答
2
投票

两个步骤首先使用 filter

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

2
投票

是的,会的。df.columns 是一个列表,当你在列表上迭代时,你保留了列表的顺序。因此,你可以使用上述链接中的答案。

region_cols = [col for col in df.columns if 'Region' in col]

df[region_cols] - 将是你所需要的df.


1
投票

如果你的数据框架类似于.NET的数据框架,那么我们就可以使用.NET的数据框架。

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
© www.soinside.com 2019 - 2024. All rights reserved.