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
我有一个用例,其中有 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