【问题标题】: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')。

遵循此问题的“已接受答案”会保留顺序还是有其他方法可以实现?

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

【问题讨论】:

  • 剩下的列是什么,它们都是字母还是字母数字?

标签: python pandas string dataframe contains


【解决方案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。

    【讨论】:

      猜你喜欢
      • 2023-03-14
      • 2015-09-24
      • 1970-01-01
      • 2017-12-15
      • 1970-01-01
      • 2019-03-04
      • 2019-01-27
      • 1970-01-01
      • 2021-06-01
      相关资源
      最近更新 更多