我正在尝试仅删除列“ A”的第一次或最后一次出现。我怎么做?下面的MWE会删除A的两列。
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randint(0,100,size=(100, 4)), columns=list('ABCA'))
print (df)
df.drop(df.columns[0], axis=1, inplace=True)
print (df)
问题来源:stackoverflow
想法是为匹配A
和重复的-第一个或最后一个值创建掩码,并通过DataFrame.loc
的布尔索引`进行过滤:
np.random.seed(123)
df = pd.DataFrame(np.random.randint(0,100,size=(5, 4)), columns=list('ABCA'))
print (df)
A B C A
0 66 92 98 17
1 83 57 86 97
2 96 47 73 32
3 46 96 25 83
4 78 36 96 80
m1 = df.columns == 'A'
m2 = df.columns.duplicated()
m3 = df.columns.duplicated(keep='last')
df1 = df.loc[:, (m1 & m2) | ~m1]
print (df1)
B C A
0 92 98 17
1 57 86 97
2 47 73 32
3 96 25 83
4 36 96 80
df2 = df.loc[:, (m1 & m3) | ~m1]
print (df2)
A B C
0 66 92 98
1 83 57 86
2 96 47 73
3 46 96 25
4 78 36 96
但是,如果只需要第一个重复的列:
df3 = df.loc[:, ~m2]
#last duplicated
df4 = df.loc[:, ~m3]
回答来源:stackoverflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。