我有两个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]}
     )

然后我通过管道将它们合并在一起,并try 转换/分配一个新变量

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

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

推荐答案

您可以使用evalassign来创建额外的列,但后者需要在使用列之前判断新的数据帧,这就是您必须在此处使用lambda函数的原因:

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

输出:

>>> solar_p
   pool  MoP   prin   orig      remn
0     1    1  113.1  635.1  0.178082
1     1    2  115.3  635.1  0.181546
2     1    3  456.6  635.1  0.718942
3     1    4  234.1  635.1  0.368603

Python相关问答推荐

OdooElectron 商务产品详情页面中add_qty参数动态更新

有什么方法可以修复奇怪的y轴Python matplotlib图吗?

Python中使用Delivercio进行多个请求

Django注释:将时差转换为小数或小数

如果我已经使用了time,如何要求Python在12秒后执行另一个操作.sleep

无法导入已安装的模块

Python:记录而不是在文件中写入询问在多文件项目中记录的最佳实践

如何使用bs 4从元素中提取文本

请从Python访问kivy子部件的功能需要帮助

如何使用entry.bind(FocusIn,self.Method_calling)用于使用网格/列表创建的收件箱

如何使用Google Gemini API为单个提示生成多个响应?

将numpy数组存储在原始二进制文件中

Python 约束无法解决n皇后之谜

无法通过python-jira访问jira工作日志(log)中的 comments

删除字符串中第一次出现单词后的所有内容

当独立的网络调用不应该互相阻塞时,'

OR—Tools中CP—SAT求解器的IntVar设置值

将JSON对象转换为Dataframe

启动带有参数的Python NTFS会导致文件路径混乱

为什么if2/if3会提供两种不同的输出?