Python Pandas使用列第一字符和一组要匹配的值来查找匹配模式的行



我有一个按company_name排序的DataFrame:

company_name
0     A
1     AA
2     abcd
3     abcdu
4     abcdw
5     efg
6     efgu
7     zvttu
8     zvttw

我想选择前3个字母相同的行,并以";u"结尾的行。或"w".

理想情况下,我希望结果看起来像这样(包括"main">

company_name,  main_name
0     abcd        abcd       
1     abcdu       abcd
2     abcdw       abcd
3     efg         efg
4     efgu        efg

假设company_name的开头必须包含u或w,名称的结尾可以不同。最好的

我们试试:

# extract company name by removing ending `uw`
s = df.company_name.str.extract('(.*)[uw]$', expand=False)
company_names = s.fillna(df.company_name)
# valid names are those appear alone and with `uw`
valid_names = s.isna().groupby(company_names).transform('nunique') == 2
df['main_name'] = company_names.where(valid_names)

输出:

company_name main_name
0         abcd      abcd
1        abcdu      abcd
2        abcdw      abcd
3          efg       efg
4         efgu       efg
5        zvttu       NaN
6        zvttw       NaN

最新更新