我慢慢开始在 excel 中使用 python。不知怎么地,我管理了代码,但这次我收到的输出数据是用“,”分隔的。如何使用py选项 excel 做到这一点。

根据下图,aa、dd、ee 的总和为 18,bb、gg 的总和为 9,依此类推。我可以单独求和,但不确定如何处理分隔文本。任何帮助都将不胜感激。谢谢。

6

  • 您能否说明一下您想要做什么?您想要 Python 还是 Excel 解决方案?


    – 

  • @Parmesh 在 Excel Office 365 中,Python 选项也可用。我想通过 excel 中的 python 代码获取结果。


    – 

  • 您希望获得什么结果,将 g 中的数字相加,还是将 j 中的数字相加,还是什么?


    – 

  • @redoc 我只想要 g 列的总和。例如:从输入表 aa = 3、dd = 4、ee = 9。&输出数据以 aa、dd、ee 分隔。所以总和是 16。


    – 

  • 好的,你的图片具有误导性,也许可以删除 g 中的那些值,这样人们就会明白必须找到那些值。


    – 


最佳答案
4

所以这样做:

SUM(SUMIF(A$3:A11,TEXTSPLIT(D3,",",,,1,","),B$3:B11))

1

  • ++ 如果数据不是太大,Excel 公式最适合此任务…


    – 

我想通过 Excel 中的 Python 代码获取结果。 – Srikanth 9 小时前评论

您不需要 Python 来实现这一点,但如果您热衷于学习如何使用 Python 来实现这一点,那么请看这里。我已经对代码进行了注释,但如果您仍然想要特定行的解释,只需询问 🙂

假设您的数据如下所示。

这是您要尝试的吗?输入此代码G3并按+ Python ModeCTLENTER

import pandas as pd

#~~> Load data from I2:J11 into a dataframe
data_df = xl("I2:J11", headers=True)

#~~> Get the delimited list from F3:F6
delimited_lists = xl("F3:F6")[0].tolist() if isinstance(xl("F3:F6"), pd.DataFrame) else xl("F3:F6")

#~~> Create dictionary of Header1 and Header2
key_value_dict = dict(zip(data_df.iloc[:, 0], data_df.iloc[:, 1].astype(int)))

#~~> Calculate sum for each delimited list in F3:F6
summed_values = [
    sum(key_value_dict.get(key.strip(), 0) for key in item.split(',')) if item else 0
    for item in delimited_lists
]

#~~> Output the results as a list of lists to spill over multiple cells
[[value] for value in summed_values]

输出为 Python 对象 – Dataframe

输出为 Excel 值

输入E2=PY

df_nv = xl("A1:B10", headers=True)
names = xl("D2:D5").iloc[:,0]
nv = dict(zip(df_nv["Name"],df_nv["Value"]))

def sum_split(a):
    return sum(map(lambda a: nv[a], a.split(",")))

list(map(sum_split, names))


Siddharth Rout的答案有更好的检查 – 例如仅为多单元输入xl返回dataFrame 。

5

  • 太棒了!很好地利用了map()withinsum()我还在学习 Python,所以这是一个很好的教训!


    – 

  • 谢谢@SiddharthRout,我也在学习。顺便说一句,用检查 dataFramexl很好。我会在我的回答中提到这一点。


    – 

  • 我正在尝试自学,因此我愿意听取任何建议…您有什么好书或在线网站可以推荐吗?


    – 

  • 1
    @SiddharthRout,我主要使用,但也喜欢“Fluent Python”。


    – 

  • 非常感谢 🙂


    – 

在 Excel 应用程序版本中无法访问 Excel 中的 Python,但可以使用 Office 365 中的常规 Excel 函数来完成:
=MAP(F4:F7,LAMBDA(x,SUM(LOOKUP(TEXTSPLIT(x,","),I4:J12))))

或者不使用 Lambda:=MMULT(TOROW(J4:J12)*ISNUMBER(FIND(","&TOROW(I4:I12)&",",","&F4:F7&",")),IFERROR(J4:J12^0,0))