如何在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
相关产品推荐
相关产品推荐

