我有一个按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