В Pandas как обновить значение столбца в одной строке на основе значения другого столбца в другой строке - PullRequest
3 голосов
/ 14 мая 2019

Я хочу обновить значение в ячейке на основе значения в другой ячейке в другой строке.

Мой фрейм данных указан ниже:

OrderId   OrderType   Exch
    P_001       P         NYSE
    P_001_1     C          | | 
    P_002       P          |CHIX|
    P_002_1     C          | |
    P_002_2     C          | |

И я хочу, чтобы результат был

OrderId   OrderType    Exch

P_001       P          |NYSE|
P_001_1     C          |NYSE|
P_002       P          |CHIX|
P_002_1     C          |CHIX|
P_002_2     C          |CHIX|

Используя .loc я могу обновить те же строки, но я не могу найти какое-либо решение во фрейме данных Pandas для такого обновления.

Пока я задаю этот вопрос, я пытаюсь разделить идентификатор заказа и выполнить поиск во фрейме данных, чтобы обновить значения Exch.

Ответы [ 2 ]

1 голос
/ 14 мая 2019

Если несуществующие значения отсутствуют, используйте пропущенные значения для прямой пересылки:

df['Exch'] = df['Exch'].ffill()

Или используйте Series.str.split для нового DataFrame, группируйте по первому и второму столбцу с помощью GroupBy.transform и GroupBy.first:

df1 = df['OrderId'].str.split('_', expand=True)
df['Exch'] = df.groupby([df1[0], df1[1]])['Exch'].transform('first')

print (df)
   OrderId OrderType  Exch
0    P_001         P  NYSE
1  P_001_1         C  NYSE
2    P_002         P  CHIX
3  P_002_1         C  CHIX
4  P_002_2         C  CHIX

Другая идея - получить строки с P, создать Series и map:

s = df[df['OrderType'].eq('P')].set_index('OrderId')['Exch']
df['Exch'] = df['OrderId'].str.rsplit('_', n=1).str[0].map(s).fillna(df['Exch'])
print (df)
   OrderId OrderType  Exch
0    P_001         P  NYSE
1  P_001_1         C  NYSE
2    P_002         P  CHIX
3  P_002_1         C  CHIX
4  P_002_2         C  CHIX
0 голосов
/ 14 мая 2019
df= df.ffill(axis = 0) 
print(df)

         a  b     c
0    P_001  P  NYSE
1  P_001_1  C  None
2    P_002  P  CHIX
3  P_002_1  C  None
4  P_002_2  C  None
         a  b     c
0    P_001  P  NYSE
1  P_001_1  C  NYSE
2    P_002  P  CHIX
3  P_002_1  C  CHIX
4  P_002_2  C  CHIX

Если вы хотите сделать это для набора даты while.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...