Обновление значений столбца в кадре данных dask на основе некоторых условий в некоторых других столбцах - PullRequest
0 голосов
/ 22 января 2019

У нас есть очень большой файл CSV, который был импортирован как кадр данных dask.Я делаю небольшой пример, чтобы объяснить вопрос.

import dask.dataframe as dd
df = dd.read_csv("name and path of the file.csv")
df.head()

output

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   | NaN  | 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

Я знаю, как это сделать на пандах:

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

df.loc[condition,'col4'] = df.loc[condition, 'col1'].values

1 Ответ

0 голосов
/ 22 января 2019

Я думаю, вам нужно:

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

Или dask.dataframe.Series.mask:

df['col4'] = df['col4'].mask(condition, 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   NaN    23    64
...