首页 > 解决方案 > 如果在数据帧的前一行中找到子字符串的第一个实例,则从行中删除

问题描述

我正在对网络抓取的口袋妖怪统计数据进行数据分析。如何删除第 3 行中“Venusaur”的第一个实例,所以它只显示“Mega Venusaur”?我正在考虑一个比较行中前一个“名称”的函数,但如何访问名称的第一个实例?并将其应用于列表其余部分中的所有“巨型”。

name_instance = for Name in Names
poke_df.loc[poke_df['Name'].str.contains(name_instance), 'Name'] = 'Mega'+name_instance
NationalNo  Name    Type    Type_1  Type_2  HP  Attack  Defense Sp_Atk  Sp_Def  Speed   Total   Stat_Avg

2   003 Venusaur    [Grass, Poison] Grass   Poison  80  82  83  100 100 80  525 87
3   003 Venusaur Mega Venusaur  [Grass, Poison] Grass   Poison  80  100 123 122 120 80  625 104
4   004 Charmander  [Fire, None]    Fire    None    39  52  43  60  50  65  309 51

标签: pythondataframesubstring

解决方案


将条件更改为您的链接:

df = pd.DataFrame({
    'Name': ['Venusaur', 'Venusaur Mega Venusaur', 'Charmander']})
df['Prev Name'] = df['Name'].shift(fill_value='')


def get_name(row):
    name = row['Name']
    prev_name = row['Prev Name']
    if name.startswith(prev_name):
        return name[len(prev_name):]
    return name


df['Name'] = df.apply(get_name, axis=1)
df.drop(columns='Prev Name', inplace=True)
print(df)

输出是:

        Name
0        Venusaur
1   Mega Venusaur
2      Charmander

推荐阅读