保留列的第一个实例并删除其他实例,在列名称中使用部分文本

问题描述 投票:0回答:1

A df 有列

ABC_81, ABC_y, ABC_aa, ZXC_aa, ZXC_5, ZXC_hi
:

data = {
    'ABC_81': [1, 2, 3],
    'ABC_y': [4, 5, 6],
    'ABC_aa': [7, 8, 9],
    'ZXC_aa': [10, 11, 12],
    'ZXC_5': [13, 14, 15],
    'ZXC_hi': [16, 17, 18]
    }

在 df 中从左到右,我想保留以 ABC 开头的列名称的第一个实例并删除其他实例。

Keep ABC_81,
Drop ABC_y, ABC_aa

同样

Keep ZXC_aa,
Drop ZXC_5, ZXC_hi

等等

结果应该是:

data = {
    'ABC_81': [1, 2, 3],
    'ZXC_aa': [10, 11, 12] 
    }

另外,这可以在不知道列名的情况下完成吗?

pandas dataframe drop
1个回答
0
投票

是的,您可以在不明确知道使用 pandas 的列名称的情况下实现此目的。例如,你可以这样做,兄弟:

import pandas as pd


data = {
    'ABC_81': [1, 2, 3],
    'ABC_y': [4, 5, 6],
    'ABC_aa': [7, 8, 9],
    'ZXC_aa': [10, 11, 12],
    'ZXC_5': [13, 14, 15],
    'ZXC_hi': [16, 17, 18]
}

df = pd.DataFrame(data)

# Create a list to store the columns to keep
columns_to_keep = []

# Iterate over the columns of the DataFrame
for col in df.columns:
    # Check if the column starts with 'ABC' or 'ZXC'
    if col.startswith('ABC') or col.startswith('ZXC'):
        # Append the first occurrence of the column name to the list
        if col[:3] not in columns_to_keep:
            columns_to_keep.append(col[:3])

# Filter the DataFrame to keep only the columns in columns_to_keep
df_filtered = df[[col for col in df.columns if col[:3] in columns_to_keep]]

print(df_filtered)

此代码迭代 DataFrame 的列并检查每列是否以“ABC”或“ZXC”开头。然后,如果列名是第一次出现,它会将列名的前三个字符附加到列表 columns_to_keep 中。最后,它过滤 DataFrame 以仅保留 columns_to_keep 中存在的列。 (希望我能理解)

© www.soinside.com 2019 - 2024. All rights reserved.