我想从另一列中获取名称所在的列的值。
我的表中有很多列,因此这样做pl.when().then()
不是一个选择。
作为输入,我们有这个数据框:
富 | foo_count | 酒吧 | 条形计数 | 巴兹 | baz_count | 最大的 |
---|---|---|---|---|---|---|
1 | 23 | 4 | 43 | 5 | 64 | 巴兹 |
2 | 四十五 | 6 | 四十五 | 1 | 43 | 酒吧 |
3 | 234 | 9 | 453 | 15 | 231 | 巴兹 |
4 | 55 | 2 | 67 | 3 | 94 | 富 |
并希望将其转换为with_columns()
:
富 | foo_count | 酒吧 | 条形计数 | 巴兹 | baz_count | 最大的 | 最大计数 |
---|---|---|---|---|---|---|---|
1 | 23 | 4 | 43 | 5 | 64 | 巴兹 | 64 |
2 | 四十五 | 6 | 四十五 | 1 | 43 | 酒吧 | 四十五 |
3 | 234 | 9 | 453 | 15 | 231 | 巴兹 | 231 |
4 | 55 | 2 | 67 | 3 | 94 | 富 | 4 |
这个(伪)代码说明了我的想法(但当然这不起作用)
df = pl.DataFrame({"foo" : [1, 2, 3, 4],
"foo_count" : [23, 45 ,234, 55],
"bar" : [4 ,6 ,9, 2],
"bar_count" : [43, 45 ,453, 67],
"baz": [5,1,15, 3],
"baz_count" : [64, 43 ,231, 94],
"largest" : ["baz", "bar", "baz", "foo"]})
df.with_columns(
pl.col(f"{pl.col('largest')}_count").alias("largest_count")
)
这是一个简单的方法。首先,我们使用when-then表达式生成器为屏蔽列创建表达式。然后,我们依靠
pl.coalesce
来组合屏蔽列。仍然有一个针对largest中唯一元素的简单 Python 循环。这是一种即使列数非常多也能扩展的方法。我们可以只提取计数列:
然后创建一个带有索引的规范化表:
然后我们可以使用临时索引将标准化计数连接到原始数据框: