我想在 python 的 Polars 库中根据另一列的名称在一列中填充一个值(我通过扩展变量的列名获得了以下 DF):
输入:
姓名 | 平均的 | 中位数 | 问题 1 | 多变的 |
---|---|---|---|---|
苹果 | 2 | 3 | 4 | 平均的 |
苹果 | 2 | 3 | 4 | 中位数 |
苹果 | 2 | 3 | 4 | 问题 1 |
香蕉 | 1 | 5 | 10 | 平均的 |
香蕉 | 1 | 5 | 10 | 中位数 |
香蕉 | 1 | 5 | 10 | 问题 1 |
预期输出:
姓名 | 平均的 | 中位数 | 问题 1 | 多变的 | 价值 |
---|---|---|---|---|---|
苹果 | 2 | 3 | 4 | 平均的 | 2 |
苹果 | 2 | 3 | 4 | 中位数 | 3 |
苹果 | 2 | 3 | 4 | 问题 1 | 4 |
香蕉 | 1 | 5 | 10 | 平均的 | 1 |
香蕉 | 1 | 5 | 10 | 中位数 | 5 |
香蕉 | 1 | 5 | 10 | 问题 1 | 10 |
您可以在此处生成输入表:
test = pl.DataFrame(
{
"Name": ["Apple","Apple","Apple","Banana","Banana","Banana"],
"Average": [2,2,2,1,1,1],
"Median": [3,3,3,5,5,5],
"Q1": [4,4,4,10,10,10],
"Variable":["Average","Median","Q1","Average","Median","Q1"]
}
)
我尝试过:
df = df.with_columns(value = pl.col(f"{pl.col.variable}"))
但这并不奏效,因为极坐标将参数视为函数 (?)。有人知道怎么做吗?
注意:我还尝试过转置数据框,但这不仅计算成本高昂,而且也不起作用!因为它会将 DF 转置为 5 行长的 DF。我需要的是 (名称 * 变量数) 行长的 DF。
也就是说,例如,我有 3 个不同的名称(比如,苹果、香蕉和火龙果),并且有 3 个变量(平均值、中位数、Q1),那么我的 DF 应该有 9 行长!
您可以使用
when/then()
检查列的值是否Variable
与列名相同。coalesce()
选择第一个非空结果。您可以通过映射
polars.when()
来利用此功能。polars.then()
例如,