Необходимо обновить строку данных pandas в зависимости от значения ячейки. Также, если 2 строки имеют одинаковое значение ячейки, нужно обновить только первый - PullRequest
2 голосов
/ 27 апреля 2020

СЦЕНАРИЙ 1

Кадр данных выглядит следующим образом:

   AAA   BBB
0    A   100
1    B   100
2    C   100
3    D   100

Установите AAA = 'Z' и BBB = 200, где AAA = 'C'?

СЦЕНАРИЙ 2

Кадр данных выглядит следующим образом:

   AAA   BBB
0    A   100
1    B   100
2    C   100
3    B   100

Установите AAA = 'Z' и BBB = 200, где AAA = 'B', но только там, где индекс = 1? Таким образом, в основном только в первой строке, если несколько строк соответствуют критериям «где».

Моя попытка

Я пробовал что-то подобное, и это работает для сценария 1, но я не знаю, как сделать сценарий 2

df.iloc[ np.where( df_positions.AAA == 'C')[0]] = 'Z'

Ответы [ 2 ]

2 голосов
/ 27 апреля 2020

В вашем случае

cond=(df.index==1)&df.AAA.eq('B')
df.loc[cond]=['Z',200]
df
  AAA  BBB
0   A  100
1   Z  200
2   C  100
3   B  100
1 голос
/ 27 апреля 2020

Вы можете использовать idxmax, чтобы получить индекс первой строки из совпадений.

df.loc[df.AAA.eq('B').idxmax()] = ['Z', 200]
df
  AAA  BBB
0   A  100
1   Z  200
2   C  100
3   B  100

И если вы хотите каждый раз заменять одно и то же значение (['Z',200]) оба сценария одновременно

df.loc[[df.AAA.eq(x).idxmax() for x in ['C','B']]] = ['Z',200]
df
  AAA  BBB
0   A  100
1   Z  200
2   Z  200
3   B  100
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...