如何过滤数据框中仅包含特定重复字符的元素

时间:2019-05-23 15:19:51

标签: python pandas python-2.7 dataframe

我正在寻找创建一个新的数据框,以从先前的数据框中过滤掉多余的信息。原始数据帧是通过浏览许多文件夹并提供一列元素(每个元素包含访问每个文件的完整路径的字符串)而创建的。每个文件均根据试验编号和分数在相应的测试文件夹中命名。我需要删除所有针对每项试验的100分数的重复,但是,必须保留针对每项试验的100分数。

我知道使用python Pandas     df [df [col_header] .str.contains('text')] 专门过滤掉所需的内容以及将“〜”用作布尔NOT。

未过滤的具有多余分数的数据框列如下所示

\\desktop\Test_Scores\test1\trial1-98
\\desktop\Test_Scores\test1\trial2-100
\\desktop\Test_Scores\test1\trial3-100       #<- must remove
\\desktop\Test_Scores\test2\trial1-95
\\desktop\Test_Scores\test2\trial2-100
\\desktop\Test_Scores\test2\trial3-100       #<- must remove
\\desktop\Test_Scores\test2\trial3-100       #<- must remove
.
.
.
n

使用一些代码作为过滤器后的预期结果将是一个看起来像这样的数据框

\\desktop\Test_Scores\test1\trial1-98
\\desktop\Test_Scores\test1\trial2-100
\\desktop\Test_Scores\test2\trial1-95
\\desktop\Test_Scores\test2\trial2-100
.
.
.
.
n

1 个答案:

答案 0 :(得分:1)

这一行应该可以解决您的问题。

df = df.loc[df["col"].shift().str.contains("-100") != df["col"].str.contains("-100")]

更新:

df["col"] = df["col"].str.replace('\t','\\t')
df['test_number'] = df.col.str.split('-').str[0].str.split('\\').str[-2]
df['score'] = df.col.str.split('-').str[1]
df.drop_duplicates(["test_number","score"], inplace = True)
df.drop(["test_number","score"],1,inplace = True)

签出此解决方案。我之所以要在第一行进行替换,是因为您的数据包含\t,在编程中它是制表符分隔符。