【问题标题】:Select columns by their values按值选择列
【发布时间】:2018-12-27 14:44:46
【问题描述】:
d = {'Consumer Staples': [-0.065], 'Technology': [0.04], 'Financials': [0.06], 'Health Care': [0.07]}
df = pd.DataFrame(data = d)

我只想返回Value的绝对值大于0.05的列的名称。在此示例中,它应该返回 Consumer Staples、Financials 和 Health Care,但不返回 Technology。如何在 Pandas 上执行此操作?

谢谢!

【问题讨论】:

  • 没有投反对票,但您需要将代码作为文本、原始数据以重新创建您的 df、您的尝试和期望的结果。不是图片链接
  • @EdChum 嗨 EdChum,我只是将代码写成文本。
  • df.columns[df.gt(0.05).values[0]] 还是你追求绝对值?在这种情况下df.columns[df.abs().gt(0.05).values[0]]
  • @EdChum 非常感谢!

标签: python pandas


【解决方案1】:

将来包括您的文本代码、原始数据、重现 df 的代码和所需的结果。

您可以使用abs 来返回绝对值,gt 用于生成布尔掩码,我们可以使用它来掩码列。注意这里因为我们有一个数据框,掩码也是一个数据框,要获取布尔值使用.values返回一个numpy数组,这是一个嵌套列表,所以你需要使用下标运算符[]进行索引:

In[112]:
df.columns[df.abs().gt(0.05).values[0]]

Out[112]: Index(['Consumer Staples', 'Financials', 'Health Care'], dtype='object')

如果您想要字符串列表,请致电tolist()

In[116]:
df.columns[df.abs().gt(0.05).values[0]].tolist()

Out[116]: ['Consumer Staples', 'Financials', 'Health Care']

【讨论】:

  • 非常感谢。下一次,我会做得更好。
  • 最后一个问题,我如何将列的名称单独打印为字符串,而不是将整个列打印为Index 类型?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-01-31
  • 2015-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-08
相关资源
最近更新 更多