假设我在下面的DataFrame中有一个数据集:

df=pl.DataFrame({
    'x':['a','a','b','b'],
    'y':['b','c','c','a'],
    'value':[3,5,1,4]
})
df
shape: (4, 3)
┌─────┬─────┬───────┐
│ x   ┆ y   ┆ value │
│ --- ┆ --- ┆ ---   │
│ str ┆ str ┆ i64   │
╞═════╪═════╪═══════╡
│ a   ┆ b   ┆ 3     │
│ a   ┆ c   ┆ 5     │
│ b   ┆ c   ┆ 1     │
│ b   ┆ a   ┆ 4     │
└─────┴─────┴───────┘

现在,我想在此数据框中添加一列,该列将包含倒数 价值.我将inverse的值定义为inverse(x, y) == value(y, x).例如,来自 上面的例子是inverse (a, b) == value(b, a) == 4.

如果value(y, x)不存在,则inverse(x, y)将被赋予缺省值 价值0.

换句话说,我想添加一个inverse专栏,就像我最后得到的那样 大概是这样的:

shape: (4, 4)
┌─────┬─────┬───────┬─────────┐
│ x   ┆ y   ┆ value ┆ inverse │
│ --- ┆ --- ┆ ---   ┆ ---     │
│ str ┆ str ┆ i64   ┆ i64     │
╞═════╪═════╪═══════╪═════════╡
│ a   ┆ b   ┆ 3     ┆ 4       │
│ a   ┆ c   ┆ 5     ┆ 0       │
│ b   ┆ c   ┆ 1     ┆ 0       │
│ b   ┆ a   ┆ 4     ┆ 3       │
└─────┴─────┴───────┴─────────┘

这能以一种简单而最佳的方式实现吗?最好是用表情?

多谢了.

推荐答案

你可以用别名把它加到join,然后再加fill_null(0).

df.join(
    df.select(
        y="x",
        x="y",
        inverse="value"
    ),
    on=["x","y"], how="left"
).fill_null(0)
shape: (4, 4)
┌─────┬─────┬───────┬─────────┐
│ x   ┆ y   ┆ value ┆ inverse │
│ --- ┆ --- ┆ ---   ┆ ---     │
│ str ┆ str ┆ i64   ┆ i64     │
╞═════╪═════╪═══════╪═════════╡
│ a   ┆ b   ┆ 3     ┆ 4       │
│ a   ┆ c   ┆ 5     ┆ 0       │
│ b   ┆ c   ┆ 1     ┆ 0       │
│ b   ┆ a   ┆ 4     ┆ 3       │
└─────┴─────┴───────┴─────────┘

Python相关问答推荐

Pandas实际上如何对基于自定义的索引(integer和非integer)执行索引

图像 pyramid .难以创建所需的合成图像

多处理队列在与Forking http.server一起使用时随机跳过项目

如何在Python中获取`Genericums`超级类型?

Tkinter菜单自发添加额外项目

为什么np. exp(1000)给出溢出警告,而np. exp(—100000)没有给出下溢警告?

在Python中调用变量(特别是Tkinter)

如何在Pyplot表中舍入值

在输入行运行时停止代码

剪切间隔以添加特定日期

如何根据rame中的列值分别分组值

当输入是字典时,`pandas. concat`如何工作?

如何获得满足掩码条件的第一行的索引?

Django在一个不是ForeignKey的字段上加入'

Pandas数据框上的滚动平均值,其中平均值的中心基于另一数据框的时间

Scipy差分进化:如何传递矩阵作为参数进行优化?

为什么在Python中00是一个有效的整数?

对当前的鼹鼠进行编码,并且我的按键获得了注册

如何在Django查询集中生成带有值列表的带注释的字段?

使用Django标签显示信息