You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何用Pandas实现不同大小DataFrame按指定列匹配除法运算

解决Pandas中按组匹配的除法运算问题

这事儿其实很简单,我们可以用两种常见的方法来实现你要的按col1分组的除法操作,我给你详细讲讲:

方法一:利用索引匹配(高效简洁)

这种方法不需要合并整个DataFrame,直接通过索引映射对应的值来做除法,性能更好,适合数据量较大的场景:

import pandas as pd

# 先构造你的两个DataFrame
df1 = pd.DataFrame({
    'col1': ['A', 'A', 'B', 'B'],
    'col2': ['g', 'd', 'h', 'p'],
    'Val1': [4, 3, 5, 7],
    'Val2': [6, 8, 10, 14]
})

df2 = pd.DataFrame({
    'col1': ['A', 'B'],
    'Val1': [2, 1],
    'Val2': [3, 4]
})

# 把df2的索引设置为col1,这样就能通过df1的col1直接定位对应行
df2 = df2.set_index('col1')

# 对df1的Val1和Val2列执行除法,用df1的col1去匹配df2的对应值
result_df = df1.copy()
result_df[['Val1', 'Val2']] = result_df[['Val1', 'Val2']].div(df2.loc[result_df['col1']].values)

print(result_df)

运行后你就能得到想要的结果:

col1 col2  Val1  Val2
0    A    g   2.0   2.0
1    A    d   1.5   2.0
2    B    h   5.0   2.5
3    B    p   7.0   3.5

方法二:合并后再除法(直观易理解)

如果刚接触Pandas,这种方法逻辑更直白——先把两个DataFrame按col1合并,再做列之间的除法:

import pandas as pd

# 同样先构造DataFrame
df1 = pd.DataFrame({
    'col1': ['A', 'A', 'B', 'B'],
    'col2': ['g', 'd', 'h', 'p'],
    'Val1': [4, 3, 5, 7],
    'Val2': [6, 8, 10, 14]
})

df2 = pd.DataFrame({
    'col1': ['A', 'B'],
    'Val1': [2, 1],
    'Val2': [3, 4]
})

# 合并两个DataFrame,给df2的列加后缀区分
merged = df1.merge(df2, on='col1', suffixes=('', '_ref'))

# 执行除法,然后删除临时列
merged['Val1'] = merged['Val1'] / merged['Val1_ref']
merged['Val2'] = merged['Val2'] / merged['Val2_ref']
result_df = merged.drop(columns=['Val1_ref', 'Val2_ref'])

print(result_df)

两种方法都能得到你要的结果,选哪种就看你的习惯和数据规模啦~

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

火山引擎 最新活动