Найти строки с разными названиями - PullRequest
2 голосов
/ 23 марта 2020

Мой фрейм данных

    Name    Value
0   K       <apple WK1>
            contents
1   Y       <banana WK2>
            contents
2   B       <orange WK1>
            contents
3   Q       <grape WK31>
            contents
4   C       <apple WK12>
            contents
5   A       <apple WK22>
            contents

Как видите, первая строка столбца «Значение» озаглавлена. Ниже приведен другой контент.

Я хотел бы получить эти заголовки с удалением повторяющихся значений.

Если вы присматриваете за заголовком, другие символы, такие как WK, смешиваются, но удаляют его

Я хочу получить следующий результат.

  Title
0 <apple>
1 <banana>
2 <orange>
3 <grape>

Не имеет значения, если существующий фрейм данных не поддерживается.

Однако я хочу получить только заголовок значения, которые не перекрываются.

Воспроизвести:

df1 = df(data={'Name' : ['K', 'Y', 'B','Q','C','A'], 'Value' : ['<apple WK1>','<banana WK2>','<orange WK1>','<grape WK31>','<apple WK12>','<apple WK22>']}, columns = ['Name', 'Value'])  

Ответы [ 2 ]

3 голосов
/ 23 марта 2020

Попробуйте extract и drop_duplicates:

df["Value"].str.extract(r'<([a-z]*)\s+').drop_duplicates()

Если вы хотите сохранить < и >:

(df["Value"].str.extract(r'(<[a-z]*)\s+') + ">").drop_duplicates()

Полный пример:

# build dataframe
df = pd.DataFrame(data={'Name' : ['K', 'Y', 'B','Q','C','A'], 'Value' : ['<apple WK1>','<banana WK2>','<orange WK1>','<grape WK31>','<apple WK12>','<apple WK22>']}, columns = ['Name', 'Value']) 

print(df)
#   Name         Value
# 0    K   <apple WK1>
# 1    Y  <banana WK2>
# 2    B  <orange WK1>
# 3    Q  <grape WK31>
# 4    C  <apple WK12>
# 5    A  <apple WK22>

# Only select content
out_1 = df["Value"].str.extract(r'<([a-z]*)\s+').drop_duplicates()
print(out_1)
#         0
# 0   apple
# 1  banana
# 2  orange
# 3   grape

# Select content and "<" - ">"
out_2 = (df["Value"].str.extract(r'(<[a-z]*)\s+') + ">").drop_duplicates()
print(out_2)
#           0
# 0   <apple>
# 1  <banana>
# 2  <orange>
# 3   <grape>
2 голосов
/ 23 марта 2020

IIU C, вы можете использовать str.split с drop_duplicates, чтобы получить нужные значения

, затем использовать pd.series с методом to_frame, чтобы вернуть новый фрейм данных

new_df = pd.Series(
    (df["Value"].str.split("\s", expand=True).drop_duplicates(subset=[0])[0] + ">"),
    name="Value",
).to_frame()


print(new_df)
      Value
0   <apple>
1  <banana>
2  <orange>
3   <grape>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...