【问题标题】:writing expression in python: multiply string to int在python中编写表达式:将字符串乘以int
【发布时间】:2021-03-09 18:39:58
【问题描述】:

我有两个 DataFrame:一个有字符串,另一个有 int。我正在尝试将这两者相乘以生成代数表达式:

df1=pd.DataFrame([1,2,3])
df2=pd.DataFrame(["x","y","z"])

预期输出:

如何生成两种不同数据类型的表达式?

【问题讨论】:

  • 这能回答你的问题吗? String concatenation of two pandas columns
  • 我试过这个:df1[0]+"is"+df2[0].map(str) 但出错了。
  • 你想要一个实际的代数表达式,就像 sympy 一样,还是 df1 只是 df2 的系数并且你想打印公式?
  • 编辑了预期的输出。这些不是系数,而是乘数。
  • 为什么要使用数据框?您可以通过 string concatenation 做到这一点,而无需使用 pandas!

标签: python pandas sympy


【解决方案1】:

试试

formula = ""    

# looping through tuples of (x, 1) (y, 2) (z, 3)

for val, var in zip(df1.values,df2.values):

    # formatting the value and variable in the current tuple 
    # and appending to the initially empty formula string

    formula += "{}*{}+".format(val[0], var[0])

删除最后一个+号的肮脏快速方法

公式 = 公式[:-1]

【讨论】:

  • 我的输出仍然是 '00+'
  • 您循环的是列名,而不是值!
  • 快接近了,最后加上加号+号:'1*x+2*y+3*z+'。还请添加一些 cmets 以便于理解
【解决方案2】:

这应该可行。

import pandas as pd 

df1=pd.DataFrame([1,2,3])
df2=pd.DataFrame(["x","y","z"])
   
formula = '+'.join([f'{var[0]}*{val[0]}' for val, var in zip(df1.values,df2.values)])
     
print(formula)

【讨论】:

  • 缺少乘号 *
猜你喜欢
  • 2012-08-04
  • 1970-01-01
  • 2023-01-20
  • 1970-01-01
  • 2014-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-29
相关资源
最近更新 更多