删除在熊猫的其他行中包含字符串的行

时间:2019-11-12 14:54:49

标签: python pandas dataframe

以这种形式给出数据框:

 ID      A
130     Yes
130-1   Yes
130-2   Yes
200     No
201     No
201-10  No
201-101 Yes
201-22  Yes
300     No

我想删除其他行中连字符(ID)之前另一个字符串中-列中具有值的行 因此,基于此,由于存在201201-10等,我将丢弃值201-101

预期输出:

 ID      A
130-1   Yes
130-2   Yes
200     No
201-10  No
201-101 Yes
201-22  Yes
300     No

2 个答案:

答案 0 :(得分:3)

使用duplicated和一些按位操作。这确实取决于没有连字符的值,而之前是带有连字符的值。


s = df['ID'].str.split('-').str[0]
m = s.duplicated(keep=False) ^ s.duplicated()

df[~m]

        ID    A
1    130-1  Yes
2    130-2  Yes
3      200   No
5   201-10   No
6  201-101  Yes
7   201-22  Yes
8      300   No

答案 1 :(得分:1)

这是一种方法:

g = df.ID.str.split('-').str[0]
is_child = g.eq(g.shift())
is_unique = g.groupby(g).transform('size').eq(1)
output = df[is_child | is_unique]

print(output)

      ID    A
1    130-1  Yes
2    130-2  Yes
3      200   No
5   201-10   No
6  201-101  Yes
7   201-22  Yes
8      300   No

位置:

df.assign(first_num=g,
         is_child=is_child,
         is_unique=is_unique)

       ID    A   first_num  is_child  is_unique
0      130  Yes       130     False      False
1    130-1  Yes       130      True      False
2    130-2  Yes       130      True      False
3      200   No       200     False       True
4      201   No       201     False      False
5   201-10   No       201      True      False
6  201-101  Yes       201      True      False
7   201-22  Yes       201      True      False
8      300   No       300     False       True