熊猫数据框 - 按字符串过滤/选择列是不是保留顺序?
Posted
技术标签:
【中文标题】熊猫数据框 - 按字符串过滤/选择列是不是保留顺序?【英文标题】:pandas dataframe - does filtering / selecting cols by String preserve order?熊猫数据框 - 按字符串过滤/选择列是否保留顺序? 【发布时间】:2020-09-15 22:15:38 【问题描述】:我有一个用例,我说 10 个列,其中 5 个以字符串“Region”开头。我需要得到一个只包含这些列的结果数据框(以字符串'Region'开头)。不仅如此,我还需要确保订单被保留(例如,如果在原始 df 中,col 订单是 'Region 1', 'Region 2', 'Region 3'
- 这应该被保留,而不是导致 'Region 3', 'Region 2', 'Region 1'
)。
遵循此问题的“已接受答案”会保留顺序还是有其他方法可以实现?
*** - find-column-whose-name-contains-a-specific-string
【问题讨论】:
剩下的列是什么,它们都是字母还是字母数字? 【参考方案1】:如果您的数据框类似于:
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
【讨论】:
【参考方案2】:两步先用filter
s=df.filter(like='Region')
【讨论】:
我不确定这是作者要求的答案 @ArtyomAkselrod 这与您的回答完全相同。也许用regext='^Region'
替换like
更好地反映startswith。
感谢@Quang Hoang
@QuangHoang 这是对第一个未经编辑的版本的评论,这是不正确的。现在答案是正确的【参考方案3】:
是的,会的。 df.columns
是一个列表,当您遍历列表时,您会保留列表的顺序。因此,您可以使用上述链接中的答案:
region_cols = [col for col in df.columns if 'Region' in col]
df[region_cols]
- 将是您需要的 df。
【讨论】:
以上是关于熊猫数据框 - 按字符串过滤/选择列是不是保留顺序?的主要内容,如果未能解决你的问题,请参考以下文章