我之前曾问过这个问题,但没有得到适当的答复,现在尝试另作尝试。
例如:
如果我有一个名为A45-443-FGH-02A
的列和另一个名为A45-443-FGH-02B
的列。它们“重复像”,但末尾带有不同的字母。
我只需要选择结尾处带有B的这些字符,并且如果列名末尾具有“ A”,则必须将其删除。
我本来想按长度选择,但没有成功。
答案 0 :(得分:1)
假设您在A和B之间进行了检查,并且只需要具有B的属性。
df.loc[df['yourColumnName'].apply(lambda x: x.endswith('B'))]
答案 1 :(得分:1)
IIUC:
df = pd.DataFrame(columns=["A45-443-FGH-02B","A45-443-FGH-02A","ABC","CDE"])
s = df.columns.sort_values()
print (df[[i[-1] for i in s.groupby(s.str[:-1]).values()]])
#
Empty DataFrame
Columns: [A45-443-FGH-02B, ABC, CDE]
Index: []
答案 2 :(得分:1)
删除以A
结尾的重复的列名,如果不重复则不行:
c = ['A45-443-FGH-02A','A45-443-FGH-02B','B45-02A']
df = pd.DataFrame(columns=c)
print (df)
Empty DataFrame
Columns: [A45-443-FGH-02A, A45-443-FGH-02B, B45-02A]
m1 = df.columns.str[:-1].duplicated(keep=False)
m2 = df.columns.str.endswith('A')
df = df.loc[:, (m1 & ~m2) | ~m1]
print (df)
Empty DataFrame
Columns: [A45-443-FGH-02B, B45-02A]
Index: []
如果要使用像A
这样的列:
c = ['A45-443-FGH-02A','A45-443-FGH-02B','B45-02A']
df = pd.DataFrame({'A':c})
print (df)
A
0 A45-443-FGH-02A
1 A45-443-FGH-02B
2 B45-02A
m1 = df.A.str[:-1].duplicated(keep=False)
m2 = df.A.str.endswith('A')
df = df[(m1 & ~m2) | ~m1]
print (df)
A
1 A45-443-FGH-02B
2 B45-02A