Как заполнить столбец значением другого столбца на основе условия на некоторых других столбцах? - PullRequest
0 голосов
/ 28 декабря 2018

Предположим, что у нас есть данные в пандах следующим образом:

col1 | col2 | col3 | col4 
22   | Nan  | 23   |  56
12   |  54  | 22   |  36
48   | Nan  | 2    |  45
76   | 32   | 13   |  6
23   | Nan  | 43   |  8
67   | 54   | 56   |  64
16   | 32   | 32   |  6
3    | 54   | 64   |  8
67   | 4    | 23   |  64

Я хочу заменить значение col4 на col1, если col4<col1 и col2 не NaN

Таким образом, результат должен быть

col1 | col2 | col3 | col4 
22  | Nan   | 23   |  56
12  |  54   | 22   |  36
48  | Nan   | 2    |  45
76  | 32    | 13   |  76
23  | Nan   | 43   |  8
67  | 54    | 56   |  67
16  | 32    | 32   |  16
3   | 54    | 64   |  8
67  | NaN   | 23   |  64

Я попробовал следующий код

df.loc[((df['col4'] < df['col1']) & (pd.notnull(df['col2']))), ['col4']] = df.loc['col1']

проблема в том, что после знака равенства.Кто-нибудь знает, как решить проблему?

Ответы [ 4 ]

0 голосов
/ 28 декабря 2018

Немного логики, я поменяю ее на более понятный способ вашей проблемы.

df['col4'].update(df.loc[df.col2.notna(),['col1','col4']].max(1))
df
   col1 col2  col3  col4
0    22  NaN    23    56
1    12   54    22    36
2    48  NaN     2    45
3    76   32    13    76
4    23  NaN    43     8
5    67   54    56    67
6    16   32    32    16
7     3   54    64     8
8    67    4    23    67
0 голосов
/ 28 декабря 2018

Используйте это:

df.loc[(df['col1']>df['col4'])&(df['col2'].notnull()),'col4']=df['col1']

А теперь:

print(df)

Есть:

   col1  col2  col3  col4
0    22   NaN    23    56
1    12  54.0    22    36
2    48   NaN     2    45
3    76  32.0    13    76
4    23   NaN    43     8
5    67  54.0    56    67
6    16  32.0    32    16
7     3  54.0    64     8
8    67   4.0    23    67
0 голосов
/ 28 декабря 2018

Вот проверенное решение:

idx_ = df[(df['col4'] < df['col1']) & (pd.notnull(df['col2']))].index
df.loc[idx_,'col4'] = df['col1']
df


+---+------+------+------+------+
|   | col1 | col2 | col3 | col4 |
+---+------+------+------+------+
| 0 |   22 | NaN  |   23 |   56 |
| 1 |   12 | 54.0 |   22 |   36 |
| 2 |   48 | NaN  |    2 |   45 |
| 3 |   76 | 32.0 |   13 |   76 |
| 4 |   23 | NaN  |   43 |    8 |
| 5 |   67 | 54.0 |   56 |   67 |
| 6 |   16 | 32.0 |   32 |   16 |
| 7 |    3 | 54.0 |   64 |    8 |
| 8 |   67 | 4.0  |   23 |   67 |
+---+------+------+------+------+
0 голосов
/ 28 декабря 2018

Не проверено, но как насчет этого?

df[(df['col4'] < df['col1']) & (pd.notnull(df['col2'])), 'col4'] = df['col1']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...