我目前正在开发一个dataframe函数,该函数使用Python中的polars库将shape为2的numpy数组的值分配给dataframe的给定列。
我有一个dataframe df
,其中包含以下列:列'HZ'
采用[0, EC + H - 1]
中的值,列'FL'
采用[1, F]
中的值。
我还有一个numpy数组q
,形状为(EC + H, F)
,我想用这种方式将它的值赋给列'Q'
:如果df ['HZ']〉= EC,则df ['Q'] = q[df ['HZ']][df ['F'] -1]。
你可以在下面的pandas指令中找到我想做的事情。df.loc[df['HZ'] >= EC, 'Q'] = q[df.loc[df['HZ'] >= EC, 'HZ'], df.loc[df['HZ'] >= EC, 'F'] - 1]
现在我想用polars来做,我试着这样做:df = df.with_columns(pl.when(pl.col('HZ') >= EC).then(q[pl.col('HZ')][pl.col('F') - 1]).otherwise(pl.col('Q')).alias('Q'))
我得到了以下错误:
x1米11米1x
我知道我没有给予numpy好的索引格式来获取数组中的相应值,但我不知道如何替换它来获得所需的行为。
先谢谢你
1条答案
按热度按时间z4bn682m1#
我所说的测试用例/示例是指:
您尝试的方法的问题是
q[pl.col('HZ')
在.with_columns
执行之前发生,并且numpy无法理解pl.col('HZ')
。使用实际值索引numpy数组的一种方法是使用
.map
一个二个一个一个
这样做有点尴尬--最好是让你的数据以一种更好的极性格式,例如另一个 Dataframe 。
这将允许您使用更常规的方法来匹配值,例如
.join