返回包含文本值的列的列名

Posted

技术标签:

【中文标题】返回包含文本值的列的列名【英文标题】:return the column name for a column containig a text value 【发布时间】:2019-08-10 16:46:30 【问题描述】:

我有一个凌乱的数据集。每行有 8 个单词,分布在 196 列中。任务是在每一行中找到包含该单词的列。示例:单词“Paid”可以在 196 列中的任何一列中,但我们知道它就在那里。我们需要知道它在哪一列。感谢您的帮助。

【问题讨论】:

对于其他数据,是空白还是某种数字? 欢迎来到 SO!我认为如果您提供一个小示例表来更好地说明您的问题,我们会更容易为您提供帮助。如需更多信息,请阅读我们的minimal reproducible example写作指南。 每行有 200 列。列 4:196 包含 NaN 或 8 个单词之一。 感谢您的欢迎 Niayesh!一个示例表听起来是个好主意!我明天一上电脑就发一篇。 @LeeJack 其他列只是我不需要的垃圾,可以替换值。我只是无法删除它们,因为每一列在一行或多行中都有一个单词。 【参考方案1】:

我认为eq + idxmax 在这里是最简单的几个词,并且完全匹配并保证它在那里。由于它只有 8 个单词,也许只是一个列表理解并连接结果:

样本数据:

import pandas as pd
import numpy as np

np.random.seed(123)
l = ['']*192 + ['paid', 'foo', 'bar', 'baz']
df = pd.DataFrame([np.random.choice(l, replace=False, size=196)
                   for i in range(5)])

代码:

pd.concat([df.eq(word).idxmax(1).rename(word) for word in ['paid', 'foo', 'bar', 'baz']], 
          axis=1)

#   paid  foo  bar  baz
#0   112  167  184  142
#1   186   93   17  173
#2    56  142  179   67
#3    15   78   38   79
#4   116   84   18   61

如果您只需要检查列 [4:196] 使用 df.iloc[:, 4:197].eq(word) 而不是检查每一列

【讨论】:

谢谢@ALollz,这正是我想要的!

以上是关于返回包含文本值的列的列名的主要内容,如果未能解决你的问题,请参考以下文章

仅包含具有更新值的列的动态更新语句

将名称附加或粘贴到 R 中的列名称

修改列表视图查询集以汇总包含具有相同值的列的表

Google 表格 - 返回包含特定文本的单元格的列号

如何在报告中创建一个包含所有已检查列名称的列?

如何将 SQL 中的列中的值 PIVOT 到新的列名中,然后在这些 PIVOT 列下列出其他列值?