在 Vaex 中进行计算的虚拟列
Virtual column with calculation in Vaex
我想使用 Vaex 中的另一列为计算设置一个虚拟列。我需要在此计算中使用 if 语句。一般来说我想打电话给
df['calculation_col'] = log(df['original_col']) if df['original_col'] == 0 else -4
然后我尝试运行 Vaex 中的计数函数:
hist = df.count(
binby='calculation_col',
limits=limits,
shape=binnum,
delay=True
)
当我尝试执行此代码时出现错误 ValueError: zero-size array to reduction operation minimum which has no identity
。
如何在 Vaex 中为虚拟列使用条件?
使用掩码对相关行进行子集化可能很有用:
import vaex
df = vaex.example()
mask = df["id"] < 10
df["new_col"] = mask * df["x"] + ~mask * (-4)
print(df[['id', 'x', 'new_col']].head(4))
# # id x new_col
# 0 0 1.23187 1.23187
# 1 23 -0.163701 -4
# 2 32 -2.12026 -4
# 3 8 4.71559 4.71559
请注意,在原始脚本中,由于 np.log
取零会导致 numpy
触发错误,因此在这种情况下使用 np.log1p
可能更合适.
可能最“vaex”的方法是使用 where
:
import vaex
df = vaex.example()
# The syntax is where(condition, if satisfied, else)
df['calculated_col'] = df.func.where(df['x'] < 10, 0, -4)
我想使用 Vaex 中的另一列为计算设置一个虚拟列。我需要在此计算中使用 if 语句。一般来说我想打电话给
df['calculation_col'] = log(df['original_col']) if df['original_col'] == 0 else -4
然后我尝试运行 Vaex 中的计数函数:
hist = df.count(
binby='calculation_col',
limits=limits,
shape=binnum,
delay=True
)
当我尝试执行此代码时出现错误 ValueError: zero-size array to reduction operation minimum which has no identity
。
如何在 Vaex 中为虚拟列使用条件?
使用掩码对相关行进行子集化可能很有用:
import vaex
df = vaex.example()
mask = df["id"] < 10
df["new_col"] = mask * df["x"] + ~mask * (-4)
print(df[['id', 'x', 'new_col']].head(4))
# # id x new_col
# 0 0 1.23187 1.23187
# 1 23 -0.163701 -4
# 2 32 -2.12026 -4
# 3 8 4.71559 4.71559
请注意,在原始脚本中,由于 np.log
取零会导致 numpy
触发错误,因此在这种情况下使用 np.log1p
可能更合适.
可能最“vaex”的方法是使用 where
:
import vaex
df = vaex.example()
# The syntax is where(condition, if satisfied, else)
df['calculated_col'] = df.func.where(df['x'] < 10, 0, -4)