Pandas 在合并后在管道中使用分配/转换

问题描述 投票:0回答:1

我有两个dfs

solar_part = pd.DataFrame(
     {'pool': 1,
     'orig': 635.1}, index = [0]
     )

solar_aod = pd.DataFrame(
     {'pool': [1,1,1,1],
      'MoP': [1,2,3,4],
     'prin': [113.1, 115.3, 456.6, 234.1]}
     )

然后我通过管道合并在一起并尝试转换/分配一个新变量

solar_p = (
    solar_aod
    .merge(solar_part, on = ['pool'], how = 'left')
    .assign(remn = ['prin'] / ['orig'])
    )

分配(也尝试过转换)给出了

TypeError: unsupported operand type(s) for /: 'list' and 'list'
的错误,我猜这是由包围引起的。仅尝试引号会产生相同的错误,但使用
str
而不是
list
。不包括分配/转换函数,然后通过
solar_p.prin / solar_p.orig * 100
进行“长手”操作也可以,但我还有几个方程式要包括,所以我希望它尽可能简洁。在管道中合并后如何进行转换/分配?

python pandas merge transform
1个回答
0
投票

我想你正在寻找

solar_p = (
    solar_aod
    .merge(solar_part, on = ['pool'], how = 'left')
    .assign(remn = lambda df: df['prin'] / df['orig'])
)

来自pandas.DataFrame.assign

文档

列名是关键字。如果这些值是可调用的,它们将在 DataFrame 上计算并分配给新列。

© www.soinside.com 2019 - 2024. All rights reserved.