返回包含文本值的列的列名
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,这正是我想要的!以上是关于返回包含文本值的列的列名的主要内容,如果未能解决你的问题,请参考以下文章