从熊猫数据框中删除相似的行

时间:2018-11-29 18:12:05

标签: python pandas dataframe data-science data-munging

数据科学的新手,并希望从事一个简单的项目(使用Jupyter Notebook和Python 3.7)。基本上,我想使用NLP查找前50名美国电视节目中最常用的词组。但是,我遇到了一个障碍。我拥有的数据集将演出的季节存储为单独的条目。因此,例如,我有一个看起来像这样的东西:

  • 南方公园第14季
  • 全家福第3季
  • 南方公园第10季
  • 南方公园第11季
  • 南方公园第13季
  • 全家福第1季
  • 大爆炸理论第8季

我对前50个 unique 展示感兴趣。有没有办法过滤或删除Pandas DataFrame中的类似条目?可以保留第一个条目但删除所有其他条目的东西吗? (我计划从每个节目中收集每个剧集的笔录,因此电视节目的第一个实例并不重要,只要删除相似的条目以为其他唯一条目留出空间)。

我正在尝试找出会返回此结果的东西(基于上面的示例):

  • 南方公园第14季
  • 全家福第3季
  • 大爆炸理论第8季

不幸的是,我是一个新手,不知道从哪里开始,无论是正则表达式,字符串切片等。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

您似乎有一个标准的命名约定,因此您可以在此处使用正则表达式根据特定季节之前的文字删除重复项。

设置

df = pd.DataFrame({'show': {0: 'South Park Season 14',
  1: 'Family Guy Season 3',
  2: 'South Park Season 10',
  3: 'South Park Season 11',
  4: 'South Park Season 13',
  5: 'Family Guy Season 1',
  6: 'The Big Bang Theory Season 8'}})

str.extract + drop_duplicates

df.loc[
  df.show.str.extract(r'(.*)\s?Season').drop_duplicates().index
]

                           show
0          South Park Season 14
1           Family Guy Season 3
6  The Big Bang Theory Season 8

如果您只想要显示名称,而不是特定的季节,则更为简单:

 df.show.str.extract(r'(.*)\s?Season').drop_duplicates()

                     0
0           South Park
1           Family Guy
6  The Big Bang Theory