Условное отбрасывание одинаковых пар столбцов в пандах - PullRequest
0 голосов
/ 04 апреля 2019

У меня есть несколько большой кадр данных панд (100000x9).Первые два столбца представляют собой комбинацию имен, связанных со значением (с обеих сторон).Я хочу удалить нижнее значение, связанное с данной комбинацией.

Я еще ничего не пробовал, потому что я не уверен, как решить эту проблему.Мое первое впечатление - мне нужно использовать функцию apply для фрейма данных, но мне нужно выбрать каждую комбинацию «first» и «second», сравнить их и затем удалить эту строку.

df = pd.DataFrame(np.array([['John','Mary',5],['John','Mark',1],  ['Mary','John',2], ['Mary','Mark',1], ['Mark','John',3], ['Mark','Mary',5]]), columns=['first','second','third'])

df

first   second  third
0   John    Mary    5
1   John    Mark    1
2   Mary    John    2
3   Mary    Mark    1
4   Mark    John    3
5   Mark    Mary    5

Моя цель - получить этот фрейм данных

df_clean = pd.DataFrame(np.array([['John','Mary',5], ['Mark','John',3], ['Mark','Mary',5]]), columns=['first','second','third'])

df_clean

first   second  third
0   John    Mary    5
1   Mark    John    3
2   Mark    Mary    5

Есть идеи?

1 Ответ

2 голосов
/ 04 апреля 2019

Сначала мы используем np.sort для сортировки по горизонтали, затем мы используем groupby с функцией max, чтобы получить наибольшее значение для уникального значения first, second:

df[['first', 'second']] = np.sort(df[['first', 'second']], axis=1)

print(df.groupby(['first', 'second']).third.max().reset_index())
  first second third
0  John   Mark     3
1  John   Mary     5
2  Mark   Mary     5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...