Excel子组由子串

时间:2017-04-24 08:47:47

标签: excel grouping

我非常擅长Python的机器学习功能。我想分组,即根据行中的特定文本创建一个集群。在Input Excel中,有3列Sr no,Name和Summary。我想根据摘要文本中的特定值创建一个群集,即如果摘要包含文本" Veg "那么它应该是在一个群集中,如果文本包含" 非素食 ",则它应该在另一个群集中。预期输出Output Excel,其中第三列将包含聚类值。 所有素食被分组到群集0和非素食群集到群集1

K-means可以为我解决这个问题。但是如何根据摘要中的文本进行聚类。请帮助。提前谢谢。

2 个答案:

答案 0 :(得分:1)

我会比评论中的建议更进一步,并说你不需要使用Python来完成这项任务。为什么不在cluster列中包含以下公式:

=IF(ISNUMBER(SEARCH("non veg", D3)), 1, IF(ISNUMBER(SEARCH("veg", D3)), 0, -1))

假设你的故事的左上角是B2,这是第一行中的公式(即在表格的单元格E3中)。这对于包含non veg的任何单元格应为0,对于包含veg的单元格应为1,对于任何不包含{0}的行都应为-1。

你可以按照@ juanpa.arrivillaga的建议在Python中做类似的事情,但是如果你的输入和所需的输出是excel,并且在excel中有一个简单的方法,我会建议& #39;最简单的选择。

答案 1 :(得分:0)

您可以使用xlrd来读取Excel文件。

您也可以使用pandas来阅读Excel文件。

以下演示使用pandas

步骤

  1. 阅读Excel文件并从中创建Dataframepandas.read_excel方法。
  2. 根据每行Summary值编写一个返回簇号的函数。

    Input to this function is row output is 0(Vegetarian), 1(Non Vegetarian), -1(not define)

  3. 将此功能应用于Dataframe的每一行。

  4. 通过pandas.to_excel方法将最终输出写回Excel文件。
  5. <强>码

    >>> import pandas as pd
    >>> a = "43583564_input.xlsx"
    >>> df = pd.read_excel(a)
    >>> df
       sr. no Name              Summary
    0       1   T1      I am Vegetarian
    1       2   T2  I am Non Vegetarian
    2       3   T3  I am Non Vegetarian
    3       4   T4      I am Vegetarian
    4       5   T5  I am Non Vegetarian
    >>> def getCluster(row):
    ...     if row["Summary"]=="I am Non Vegetarian":
    ...         return 1
    ...     elif row["Summary"]=="I am Vegetarian":
    ...         return 0
    ...     else:
    ...         return -1
    ... 
    >>> df["Cluster"] = df.apply(getCluster, axis=1)
    >>> df
       sr. no Name              Summary  Cluster
    0       1   T1      I am Vegetarian        0
    1       2   T2  I am Non Vegetarian        1
    2       3   T3  I am Non Vegetarian        1
    3       4   T4      I am Vegetarian        0
    4       5   T5  I am Non Vegetarian        1
    >>> df.to_excel("43583564_output.xlsx")