[python] modificación del índice repetido del marco de datos

Declaración de necesidades

Por ejemplo, existe la siguiente tabla de datos, en la que el índice tiene repeticiones y el número de repeticiones varía. El requisito es: modificar el mismo índice en lotes a un índice diferente.
inserte la descripción de la imagen aquí
Por ejemplo, agregue un sufijo (1, 2, 3, ...) a cada idnex idéntico:
inserte la descripción de la imagen aquí

Código

pitón3

# python3
import pandas as pd

def modify_duplicates(df):
    indexname = df.index.name
    
    # 创建新的索引列
    df.reset_index(inplace=True)
    
    # 获取重复索引的位置
    duplicated_index = df.duplicated(subset=indexname, keep=False)
    duplicated_positions = df[duplicated_index].index
    
    # 批量处理相同索引
    for pos in duplicated_positions:
        index_value = df.at[pos, indexname]
        
        # 索引为“index_value”的重复的次数
        n_dup = len(df[df[indexname]==index_value])
        # print("index_value", index_value, n_dup)
        
        # 发现一个重复索引处理后,(下面)会同时对所有索引进行处理。如果重复次数不是>=2,则不再处理
        if n_dup < 2: 
            continue
            
        # 对索引为“index_value”的n_dup个索引统一修改(上面判断n_dup<2,则不再处理)
        new_index_values = [f"{
      
      index_value}{
      
      i+1}" for i in range(n_dup)]
        df.loc[df[indexname]==index_value, indexname] = new_index_values
    
    # 将修改后的列重新设为索引
    df.set_index(indexname, inplace=True)
    
    # 检查修改后的是否有重复,如果有,请修改“new_index_values”中的命名定义
    re_df = df.reset_index(inplace=False)
    re_duplicated_index = re_df.duplicated(subset=indexname, keep=False)
    re_duplicated_positions = re_df[re_duplicated_index].index
    if list(re_duplicated_positions):
        print("#NOTE**: There are still duplicates after the modified, "
              "please change definition of `new_index_values`!!!")
    else:
        print("#NOTE: After modified, without duplicates in index.")

    return df


# 创建示例 DataFrame
data = {
    
    'A': [1, 2, 3, 4, 5], 'B': [5, 6, 7, 8, 9]}
# df = pd.DataFrame(data, index=['a1', 'a1', 'a1', 'a2', 'a2'])
df = pd.DataFrame(data, index=['a1', 'a11', 'a12', 'a21', 'a22'])
df.index.name = 'index_column'

# 打印修改前的 DataFrame
print("修改前的 DataFrame:")
display(df)

# 调用函数进行修改
df_modified = modify_duplicates(df)

# 打印修改后的 DataFrame
print("修改后的 DataFrame:")
display(df_modified)

Ejecute el código para obtener:
inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/sinat_32872729/article/details/131675844
Recomendado
Clasificación