dataframe重复行比较及保留

一个dataframe对象中,有多列,如果前两列相同时,若第三列满足条件(字符串最短),则保留否则删除,要如何实现呢(手机打的编得不是很规范请见谅)
lst ={'id':[1,2,2,2,1], 'name':['apple','banana','banana','banana','orange'], 'result':['abb','abb','abbb','aabbb','aab']}

可以使用pandas库来实现您的需求。首先,您需要安装pandas库,如果还没有安装的话:

pip install pandas

接下来,根据您提供的数据和需求,这里是一个使用pandas实现的解决方案:

import pandas as pd

data = {
    'id': [1, 2, 2, 2, 1],
    'name': ['apple', 'banana', 'banana', 'banana', 'orange'],
    'result': ['abb', 'abb', 'abbb', 'aabbb', 'aab']
}

df = pd.DataFrame(data)

# 定义一个函数来获取字符串长度
def string_length(s):
    return len(s)

# 使用groupby对'id'和'name'列进行分组,并应用自定义函数找到每组中最短的字符串
shortest_result = df.groupby(['id', 'name'])['result'].apply(lambda x: x[x.apply(string_length).idxmin()])

# 将结果转换为DataFrame并重置索引
shortest_result_df = shortest_result.reset_index()

print(shortest_result_df)

这段代码首先将提供的数据转换为一个pandas DataFrame。然后,我们定义一个函数string_length,用于计算字符串长度。接下来,我们使用groupby方法对'id'和'name'列进行分组,并应用string_length函数找到每组中最短的字符串。最后,我们将结果转换为一个新的DataFrame并重置索引。

运行这段代码后,您将看到如下输出:

   id    name result
0   1   apple    abb
1   1  orange    aab
2   2  banana    abb

这个新的DataFrame包含了原始DataFrame中满足条件的行。

  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7672213
  • 你也可以参考下这篇文章:[python学习笔记]如何一句代码去除dataframe中所有字符串中的空格
  • 除此之外, 这篇博客: DataFrame连续取多列数据,或者连续取多行数据,或者取某行某列数据中的  1.取连续多列数据,或者取某一列数据 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • X1=train_data.iloc[:,:n-1]     #取前n列数据(因为列的索引默认从0开始)
     
    Y1=train_data.iloc[:,n-1]      #取第n列数据(因为列的索引默认从0开始,第n-1就是第n列)
  • 以下回答由chatgpt基于相关博客总结生成:

    首先,我们需要使用pandas读入我们的数据,并创建一个dataframe。

    然后,我们需要使用groupby方法(根据前两列进行分组),并使用min函数获取第三列中最短的字符串。然后,我们需要使用reset_index方法,以便新的dataframe可以与旧的dataframe相匹配。最后,我们需要在这个新的dataframe上使用drop_duplicates方法,以删除原dataframe中的重复行,并保留符合特定条件的行。

    以下是代码示例:

    import pandas as pd
    
    # 读入数据并创建dataframe
    data = {
        'Col1': ['A', 'A', 'B', 'B', 'C'],
        'Col2': [1, 1, 2, 3, 3],
        'Col3': ['123', '12', '12345', '1234', '1']
    }
    df = pd.DataFrame(data)
    
    # 根据前两列分组,获取第三列中最短的字符串
    grouped = df.groupby(['Col1', 'Col2'], sort=False)['Col3'].min().reset_index()
    
    # 在新的dataframe上删除重复行并保留符合特定条件的行
    df_unique = grouped.drop_duplicates(subset=['Col1', 'Col2'], keep='first')
    
    # 打印结果
    print(df_unique)