Дубликат, другой конец python - PullRequest
1 голос
/ 17 марта 2020

Я задавал этот вопрос раньше, не получив правильного ответа, пытаясь теперь по-другому.

Например: если я получил столбец с именем A45-443-FGH-02A и другой столбец с именем A45-443-FGH-02B. Они «похожи друг на друга», но с другой буквой на конце. Мне нужно выбрать только эти с буквой B в конце, и если имя столбца имеет «A» в конце, он должен быть удален. Я думал выбирать по длине, но у меня ничего не получилось.

Ответы [ 3 ]

1 голос
/ 17 марта 2020

IIU C:

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: []
1 голос
/ 17 марта 2020

Удалять дублированные имена столбцов, заканчивающиеся 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
1 голос
/ 17 марта 2020

Если у вас есть проверка между A и B и вам нужны атрибуты только с B.

df.loc[df['yourColumnName'].apply(lambda x: x.endswith('B'))]
...