Сортировать подмножество столбцов для условия соответствия строк - PullRequest
0 голосов
/ 30 апреля 2018

Мой DataFrame выглядит так:

     a b  c d e f g
   0 x y  1 3 4 5 6
   1 x y -1 7 8 5 6
   2 x y -1 7 8 3 4

Для строк, где df.c == -1 Я бы хотел отсортировать все столбцы между df.d и df.g в порядке возрастания.

Результат будет:

     a b  c d e f g
   0 x y  1 3 4 5 6
   1 x y -1 5 6 7 8
   2 x y -1 3 4 7 8

Я пробовал несколько вещей, но ни одна из них не работала:

for row in df.itertuples():
if row.c == -1:
    subset = row[4:]
    sorted = sorted(subset)
    df.replace(to_replace=subset, value= sorted)

, а также

df.loc[df.c == -1, df[4:]] = sorted(df[4:])

Ответы [ 2 ]

0 голосов
/ 30 апреля 2018

Вы можете использовать numpy.sort в интересующей области.

mask = df.c.eq(-1), slice('d', 'g')

df.loc[mask] = np.sort(df.loc[mask].values)

df
#    a  b  c  d  e  f  g
# 0  x  y  1  3  4  5  6
# 1  x  y -1  5  6  7  8
# 2  x  y -1  3  4  7  8
0 голосов
/ 30 апреля 2018

Вероятно, не самый быстрый, но это работает:

rmask = df.c == -1
cmask = ['d', 'e', 'f', 'g']
df.loc[rmask, cmask] = df.loc[rmask, cmask].apply(lambda row: sorted(row), axis=1)
df
   a  b  c  d  e  f  g
0  x  y  1  3  4  5  6
1  x  y -1  5  6  7  8
2  x  y -1  3  4  7  8
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...