根据其他某些列上的某些条件更新dask数据框中的列的值

时间:2019-01-22 06:50:23

标签: python dataframe conditional-statements dask

我们有一个非常大的CSV文件,已将其导入为dask数据框。我举一个小例子来解释这个问题。

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

输出

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

如果col4col1不是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 :(得分:1)

我认为您需要:

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