You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python-Polars中实现类似Pandas的DataFrame按索引逐元素相除?

在Python-Polars中实现多键匹配的逐元素除法

Polars不需要像Pandas那样显式设置多列索引来对齐数据,而是通过基于连接键的表连接实现数据对齐,再执行逐元素运算。以下是对应你Pandas示例的Polars实现:

import polars as pl

# 创建两个DataFrame,和Pandas示例结构一致
df_1 = pl.DataFrame({
    'Name': ['a','a','a', 'b','b', 'c'],
    'Name_2': ['first','second','third', 'first','second', 'first'],
    'Value': [20,40,50,100,150,400]
})

df_2 = pl.DataFrame({
    'Name': ['a','a','a', 'b','b', 'c'],
    'Name_2': ['first','second','third', 'first','second', 'first'],
    'Value': [10,20,25,50,75,200]
})

# 以Name和Name_2为连接键对齐数据,计算除法后保留所需列
result = df_1.join(df_2, on=['Name', 'Name_2'], suffix='_2').with_columns(
    (pl.col('Value') / pl.col('Value_2')).alias('Value_ratio')
).select(['Name', 'Name_2', 'Value_ratio'])

print(result)

关键说明:

  • Polars的join会自动根据指定的连接键(on=['Name', 'Name_2'])对齐两行数据,无需预先设置索引。
  • suffix='_2'用来区分两个DataFrame中同名的Value列,避免列名冲突。
  • with_columns新增计算后的结果列,alias为结果列命名。

如果两个DataFrame的连接键完全匹配(无缺失或额外行),可以用更简洁的写法:

result_simple = df_1.join(df_2, on=['Name', 'Name_2']).select(
    ['Name', 'Name_2'],
    (pl.col('Value') / pl.col('Value_right')).alias('Value_ratio')
)

内容的提问来源于stack exchange,提问作者Alexandr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 16:40:27