【问题标题】:Identify value across multiple columns in a dataframe that contain string from a list in python识别数据框中多个列的值,这些列包含 python 列表中的字符串
【发布时间】:2018-10-18 22:29:15
【问题描述】:

我有一个数据框,其中包含多个包含短语的列。我想做的是

  1. 识别包含存在于预先制作的单词列表中的字符串的列(每行观察)。
  2. 使用此信息,在此数据框中创建一个新变量,其中包含与列表匹配的列中的值。 (在本例中,“lst”是我的单词列表)

例如:起始数据框:

我想这样结束:

New_var 是新变量,它选择了观察 1 的 col1 中的响应,因为苹果酱中的“苹果”与列表中的“苹果”匹配。观察 2 会出现大橙子,因为它与列表中的“橙子”相匹配。

我已尝试通过此链接的列表理解来执行此操作: List Comprehension,但仍然不成功。我希望在 python 中做到这一点。有什么建议?我对这种编程语言比较陌生。

非常感谢。如果我发布不当或答案存在于我没有找到的地方,我感谢任何正确方向的指导。

【问题讨论】:

  • 请将您想要的结果和代码发布为文本,而不是图像。

标签: python list dataframe matching


【解决方案1】:

我们来看看你提到的单词列表和数据框

lst = ['a','m','n','o','p']

df = pd.DataFrame({'Observation': [1], 'col1': ['ab'], 'col2': ['dc'], 'col3': ['ef'], 'col4': ['yz']})
df
   Observation  col1    col2    col3    col4
  0    1         ab      dc      ef      yz

检查数据框的值是否与列表中的值匹配

df['New_var'] = [x for x in df.values[0] if any(b for b in lst if b in str(x))]
df
   Observation  col1    col2    col3    col4    New_var
  0        1     ab      dc      ef      yz       ab

【讨论】:

  • 这看起来可行!但是,当我在我的数据帧上运行它时,我得到一个返回错误 ValueError:值的长度与索引的长度不匹配。我的数据框由 547 行和 20 列组成,每列包含 NA 或每列中的文本字符串。有任何想法吗?会不会是因为有 NA 的存在?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-13
  • 2019-07-12
  • 2020-08-22
  • 1970-01-01
  • 2019-10-30
相关资源
最近更新 更多