根据列中是否存在特定子字符串创建列

Create columns based on whether specific substrings exist in column

我有一个包含大约 270,000 本书的 DataFrame,我想 get_dummies 基于 Book-Title,但只使用 select 个单词。最后,我想使用 200-300 个真正有区别的词,例如 'Mystery'、'Murder'、'Classic' 和 'Science',看看它们是否在Book-Title 每本书。我想为这些单词中的每一个添加一列,如果找不到该单词,则用 0 填充,如果找到,则用 1 填充。

如果我尝试 get_dummies 用于 整个 列,我最终会得到数十万个不同的列,而我没有 RAM 来执行此操作处理方式。

下面是我想要的示例。我已经有了一个书名中最常用的 200 个单词的列表,我只是不知道如何从这个列表中创建列。

输入:

    ISBN        Book-Title                       Book-Author            Year-Of-Publication     Publisher
0   0195153448  Classical Mythology              Mark P. O. Morford     2002     Oxford University Press
1   0002005018  Clara Callan                     Richard Bruce Wright   2001     HarperFlamingo Canada
2   0060973129  Decision in Normandy             Carlo D Este           1991     HarperPerennial
3   0374157065  Flu: The Story of the Great...   Gina Bari Kolata       1999     Farrar Straus Giroux
4   0393045218  The Mummies of Urumchi           E. J. W. Barber        1999     W. W. Norton & Company

期望的输出:

    ISBN        Title                          'World'  'Mythology'  'Mystery'  'Mummies'
0   0195153448  Classical Mythology             0        1            0          0
1   0002005018  Clara Callan                    0        0            0          0
2   0060973129  Decision in Normandy            0        0            0          0
3   0374157065  Flu: The Story of the Great...  0        0            0          0
4   0393045218  The Mummies of Urumchi          0        0            0          1  

提前致谢!

亚当

您可以对 'Book-Title' 列应用一个函数,该函数遍历单词列表以检查每个单词是否存在于每个条目中;并将输出转换为 DataFrame:

lst = ['World', 'Mythology', 'Mystery', 'Mummies']
df[lst] = df['Book-Title'].apply(lambda x: pd.Series([int(w in x) for w in lst]))

输出:

                    Book-Title  World  Mythology  Mystery  Mummies
0          Classical Mythology      0          1        0        0
1                 Clara Callan      0          0        0        0
2         Decision in Normandy      0          0        0        0
3  Flu: The Story of the Great      0          0        0        0
4       The Mummies of Urumchi      0          0        0        1

您可以使用 for 循环遍历关键字列表,为每个关键字创建一个新列。请记住,您可能希望将小写单词与小写单词进行比较,这样大小写就不是问题了。

df = pd.DataFrame({'Title': ['Classical Mythology','Clara Callan', 'Decision in Normandy', 'Flu: The Story of the Great...', 'The Mummies of Urumchi']})

for keyword in ['World','Mythology','Mystery','Mummies']:
    df[keyword] = df['Title'].apply(lambda x: 1 if keyword.lower() in x.lower() else 0)

结果:

>>> df
                            Title  World  Mythology  Mystery  Mummies
0             Classical Mythology      0          1        0        0
1                    Clara Callan      0          0        0        0
2            Decision in Normandy      0          0        0        0
3  Flu: The Story of the Great...      0          0        0        0
4          The Mummies of Urumchi      0          0        0        1