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 的列名称的情况下实现此目的。例如,你可以这样做,兄弟:
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 中存在的列。 (希望我能理解)