Получить список столбцов, в которых данные отличаются для последовательных строк - PullRequest
0 голосов
/ 02 июля 2019

У меня есть таблица, содержащая повторяющиеся строки в последовательных строках.Строка с одинаковым идентификатором должна содержать повторяющиеся данные в других столбцах. Но есть несколько строк, в которых данные неверны.Например -

id  Name    Age
1   Ram     12
1   Ram     10
2   Shyam   11
2   Yam     11
3   Ravi    23
3   Ravi    23
4   Harsh   34
4   Harsh   34

Мне нужно знать столбцы, в которых столбцы различаются для последовательных строк.

Конечный результат мне нужен -

id  Name    Age     DifferentColumn
1   Ram     12      
1   Ram     10      Age
2   Shyam   11
2   Yam     11      Name
3   Ravi    23 
3   Ravi    23
4   Harsh   34
4   Krish   54      Name,Age

Я могу использовать 'Petl 'или' Pandas 'для этого, но какой должен быть мой подход?

1 Ответ

1 голос
/ 02 июля 2019

хорошо, это работает

   id   Name  Age
0   1    Ram   12
1   1    Ram   10
2   2  Shyam   11
3   2    Yam   11
4   3   Ravi   23
5   3   Ravi   23
6   4  Harsh   34
7   4  Krish   54

df['Match'] = df.groupby('id').apply(lambda x: [' ','Name,Age'] if ((len(set(x.Name)) > 1) and (len(set(x.Age)) > 1)) else [' ','Age'] if len(set(x.Age)) > 1 else [' ','Name'] if ((len(set(x.Name)) > 1)) else [' ',' ']).reset_index(name='Match').apply(lambda x: pd.Series(x.Match), axis=1).stack().reset_index(drop=True)

Что происходит

pd.groupby по идентификатору, а затем прямо, если условия для проверки, где имя и возраст разные или одинаковые. Шаги создают что-то вроде ниже

   id          Match
0   1       [ , Age]
1   2      [ , Name]
2   3         [ ,  ]
3   4  [ , Name,Age]

Далее просто откройте список и сложите их.

выход

  id   Name  Age     Match
0   1    Ram   12          
1   1    Ram   10       Age
2   2  Shyam   11          
3   2    Yam   11      Name
4   3   Ravi   23          
5   3   Ravi   23          
6   4  Harsh   34          
7   4  Krish   54  Name,Age
...