在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来计算总和。