在Python的dataframe列中添加产品数量

2024-04-25 23:16:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图通过Numpy/Pandas的帮助,计算excel表格中包含产品标题的一列中的权重之和。我已经设法将工作表加载到数据框中,并隔离包含我要查找的特定产品的行:

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

但是,由于问题的明显复杂性(如下所示),我似乎找不到一种方法来总结它的权重。例如,如果“产品标题”列包含如下值-

  • 1克ABC
  • 98%纯12克ABC
  • 0.25 kg ABC粉
  • ABC 5gr公司

其中,ABC是我要加起来的产品重量。有没有任何方法,我可以把这些重量加起来,以获得总268克。任何帮助或资源指向解决方案将不胜感激。谢谢!:)


Tags: 数据方法numpy标题pandas产品excel表格
2条回答

您需要进行一些数据争用,以获得相同格式的列的一致性。您可以进行一些匹配,并尝试使Product列对齐并保持一致,类似于日期时间格式。你知道吗

就像你可以做以下事情。你知道吗

  • 创建一个仅包含值的单独列(float)
  • 将%值改为十进制并乘以数量
  • 将值替换为kggrams
  • 没有任何字符串,只有float列才能得到total。你知道吗

熊猫能很好地解决这个问题。你知道吗

注意:这个问题没有捷径,求和时需要去掉带小数的字符串。你知道吗

您可以使用^{}表示带有单位或百分比的值:

  • (?P<a>\d+\.\d+|\d+)表示将float或int提取到列a
  • \s*-是数字和单位之间的零个或多个空格
  • (?P<b>[a-z%]+)是将数字后的小写单位或百分比提取到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>[a-z%]+)')
print (df1)
            a      b
  match             
0 0         1     gm
1 0        98      %
  1        12  grams
2 0      0.25     kg
3 0         5     gr

然后用所有单位的dictionary将第一列转换为数字,第二列转换为映射。然后按^{}重塑,按^{}重塑多列,最后sum

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

类似的解决方案:

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

相关问题 更多 >