Dask:根据多个条件屏蔽数据帧以执行选择性计算
Dask: masking a dataframe based on multiple conditions to perform selective calculations
我希望在使用 dask 时替换满足多个条件的行上的值。我将执行替换的预设值存在于一列中,如果满足条件,则我将目标值替换为预设值。
由于移动数据帧时的内存限制,如果可能的话,我宁愿呆在黑暗中而不是使用另一个库执行此操作。
目前,我正在尝试使用 .mask 命令。
其中 GrassDeadFMC >= 12 且 Windspeed <= 10 然后使 GrassFMCoefficient 等于 GFMG12L10 中的值。
ddf['GrassFMCoefficient'] = ddf['GFMG12L10'].mask(ddf['GrassDeadFMC'] >= 12 & ddf['WindSpeed'] <= 10)
我收到的错误是:
ValueError: Metadata inference failed in `and_`.
Original error is below:
------------------------
TypeError('cannot compare a dtyped [float32] array with a scalar of type [bool]')
一个最小的可执行脚本,它给出了一个稍微不同的错误,但我猜可能遇到同样的问题。
import dask.dataframe as dd
import pandas as pd
from random import randint
df = pd.DataFrame({'GrassFMCoefficient': [0 for x in range(10)],
'GFMG12L10': [randint(1, 50) for x in range(10)],
'GrassDeadFMC': [randint(1, 50) for x in range(10)],
'WindSpeed': [randint(1, 30) for x in range(10)]})
ddf = dd.from_pandas(df,npartitions=1)
ddf['GrassFMCoefficient'] = ddf['GFMG12L10'].mask(ddf['GrassDeadFMC'] >= 12 & ddf['WindSpeed'] <= 10)
print(ddf.head(10))
如有任何帮助,我们将不胜感激。
你想要这样的结果吗??
你必须用 Bracket '()'
隔离每个条件,例如。 (condition1) & (condition2)
。它也使 Boolean 与 Boolean 进行比较。
ddf['GrassFMCoefficient'] = ddf['GFMG12L10'].mask((ddf['GrassDeadFMC'] >= 12) & (ddf['WindSpeed'] <= 10))
我希望在使用 dask 时替换满足多个条件的行上的值。我将执行替换的预设值存在于一列中,如果满足条件,则我将目标值替换为预设值。
由于移动数据帧时的内存限制,如果可能的话,我宁愿呆在黑暗中而不是使用另一个库执行此操作。
目前,我正在尝试使用 .mask 命令。
其中 GrassDeadFMC >= 12 且 Windspeed <= 10 然后使 GrassFMCoefficient 等于 GFMG12L10 中的值。
ddf['GrassFMCoefficient'] = ddf['GFMG12L10'].mask(ddf['GrassDeadFMC'] >= 12 & ddf['WindSpeed'] <= 10)
我收到的错误是:
ValueError: Metadata inference failed in `and_`.
Original error is below:
------------------------
TypeError('cannot compare a dtyped [float32] array with a scalar of type [bool]')
一个最小的可执行脚本,它给出了一个稍微不同的错误,但我猜可能遇到同样的问题。
import dask.dataframe as dd
import pandas as pd
from random import randint
df = pd.DataFrame({'GrassFMCoefficient': [0 for x in range(10)],
'GFMG12L10': [randint(1, 50) for x in range(10)],
'GrassDeadFMC': [randint(1, 50) for x in range(10)],
'WindSpeed': [randint(1, 30) for x in range(10)]})
ddf = dd.from_pandas(df,npartitions=1)
ddf['GrassFMCoefficient'] = ddf['GFMG12L10'].mask(ddf['GrassDeadFMC'] >= 12 & ddf['WindSpeed'] <= 10)
print(ddf.head(10))
如有任何帮助,我们将不胜感激。
你想要这样的结果吗??
你必须用 Bracket '()'
隔离每个条件,例如。 (condition1) & (condition2)
。它也使 Boolean 与 Boolean 进行比较。
ddf['GrassFMCoefficient'] = ddf['GFMG12L10'].mask((ddf['GrassDeadFMC'] >= 12) & (ddf['WindSpeed'] <= 10))