如何正确判断Pandas数据框是否基于另一列中的字符串替换了一列中的值

ddhy6vgd  于 2023-05-12  发布在  其他
关注(0)|答案(1)|浏览(89)

我在Python中有一个非常大的Pandas数据框,其中有三个重要的列;'file'、'comment'和'number'。它是一个列表,其中包含许多不同的文件,并分配了ID号,但其中一些文件替换了旧文件,并且应该具有相同的ID号,而不是单独的ID号。例如:

df_test = pd.DataFrame(data = None, columns = ['file','comment','number'])
df_test.file = ['file_1', 'file_1_v2', 'file_2', 'file_2_v2', 'file_3', 'file_3_v2']
df_test.comment = ['none', 'Replacing: file_1', 'none', 'Replacing: file_2', 'none', 'Replacing: file_3']
df_test.number = ['12', '12', '15', '16', '18', '18']

我想要的是检查“编号”列是否显示原始文件和具有以“替换:',它将数字与注解末尾显示的文件进行比较。在这个例子中,我想要一个列表或数据框中的一个新列,内容如下:“真”、“真”、“假”、“假”、“真”、“真”;因为第二个和最后一个文件已经被分配了与它们正在替换的文件相同的ID号,但是第四个文件没有。我真的不知道如何检查它和任何帮助是赞赏!谢谢!

k97glaaz

k97glaaz1#

如果总是none在替换文件之前,可以将其替换为缺失值并回填组的帮助程序Series的缺失值,最后测试GroupBy.transform是否具有DataFrameGroupBy.nunique的每个组的唯一number

s = df_test['comment'].mask(df_test['comment'].eq('none')).bfill()
df_test['test'] = df_test.groupby(s)['number'].transform('nunique').eq(1)
print (df_test)

        file            comment number   test
0     file_1               none     12   True
1  file_1_v2  Replacing: file_1     12   True
2     file_2               none     15  False
3  file_2_v2  Replacing: file_2     16  False
4     file_3               none     18   True
5  file_3_v2  Replacing: file_3     18   True

组的另一个想法是在Series.str.extract中的最后一个空格之后提取文件名,用Series.fillna替换不匹配的值,并像以前的解决方案一样测试每个组的唯一性:

s = df_test['comment'].str.extract(r'\s(.*)$', expand=False).fillna(df_test['file'])
df_test['test'] = df_test.groupby(s)['number'].transform('nunique').eq(1)
print (df_test)
        file            comment number   test
0     file_1               none     12   True
1  file_1_v2  Replacing: file_1     12   True
2     file_2               none     15  False
3  file_2_v2  Replacing: file_2     16  False
4     file_3               none     18   True
5  file_3_v2  Replacing: file_3     18   True

相关问题