pandas: группировать по двум столбцам и возвращать разницу для столбца строки

#python-3.x #pandas #string #diff

#python-3.x #pandas #строка #разница

Вопрос:

У меня есть фрейм данных, который выглядит следующим образом:

 import pandas as pd

data = {'First':  ['First value','Third value','Second value','First value','Third value','Second value','Third value','Second value','First value','Third value'],

'Second': ['A','B','A','A','C','B','C','B','B','D']}

 df = pd.DataFrame (data, columns = ['First','Second'])
 

Я хотел бы сгруппировать эти два столбца и вернуть соответствующее значение, которое отсутствует для каждого значения в первом столбце в отдельном столбце. так, например, «Первое значение» из первого столбца не имеет значений B, C из второго столбца и так далее.

желаемый результат:

 First         unmatched value
First value   D,C
Second value  C,D
Third value   A
 

Я пробовал:

 df.groupby('First')['Second'].diff()
 

Но он не работает со строками и возвращает ошибку

Комментарии:

1. скороговорка и желаемый результат не имеют для меня смысла.

2. Я ищу метод, который возвращал бы, какая соответствующая метка отсутствует для каждого значения в первом столбце. имеет ли это смысл?

3. «верните, какая соответствующая метка отсутствует для каждого значения», тогда ваш вывод неверен? Почему «B» отсутствует для «Первого значения» и почему «D» не отсутствует для «Первого значения»?

Ответ №1:

Использовать set :

 all_values = set(df["Second"])
#{'C', 'D', 'B', 'A'}

f = lambda x: all_values - set(x)

df.groupby("First")["Second"].apply(f)
#First
#First value     {C, D}
#Second value    {C, D}
#Third value        {A}