在Python中的数据框列中添加产品的数量

我正在努力计算在包含产品标题的Excel表格中,在Numpy / Pandas的帮助下的权重总和。 我已经设法加载到一个数据框,并隔离包含我正在寻找的特定产品的行:

dframe = xlsfile.parse('Sheet1') dfFent = dframe[dframe['Product:'].str.contains("ABC") == True] 

但是,由于问题明显的复杂性,我似乎无法find总结权重的方法(如下所示)。 例如。 如果“产品名称”列包含像“

  • 1克ABC
  • 纯度为98%,12克ABC
  • 0.25公斤ABC粉末
  • ABC 5gr

在哪里,ABC是我想要加起来的产品。 有没有什么办法可以把这些重量加起来总共达到268克。 指向解决scheme的任何帮助或资源将不胜感激。 谢谢! 🙂

您可以使用extractall来获取单位或百分比的值:

  • (?P<a>\d+\.\d+|\d+)表示将float或int提取到列a
  • \s* – 数字和单位之间为零或更多空格
  • (?P<b>[az%]+)是提取小写单位或数字后的百分比b

 #add all possible units to dictonary d = {'gm':1,'gr':1,'grams':1,'kg':1000,'%':.01} df1 = df['Product:'].str.extractall('(?P<a>\d+\.\d+|\d+)\s*(?P<b>[az%]+)') print (df1) ab match 0 0 1 gm 1 0 98 % 1 12 grams 2 0 0.25 kg 3 0 5 gr 

然后通过所有单位的dictionary将第一列转换为数字和第二地图。 然后通过unstack和多列重塑,最后sum

 a = df1['a'].astype(float).mul(df1['b'].map(d)).unstack().prod(axis=1).sum() print (a) 267.76 

类似解决scheme

 a = df1['a'].astype(float).mul(df1['b'].map(d)).prod(level=0).sum() 

你需要做一些数据争夺,以获得一致的格式相同的列。 您可以进行一些匹配,并尝试使Product列保持一致,与date时间格式类似。

像你可能做以下的事情。

  • 用一个单独的列(float)
  • 将%值更改为小数,然后乘以数量
  • kg代替grams
  • 没有任何string,只浮点列来获得总和。

大pandas可以解决这个问题。

注意:这个问题没有捷径,你需要去掉混合十进制值的string来计算总和。