我有一个与此类似的列表:
G:1 Diagonal Lattice - 5/16" Lath (1x2 Framed) S.S (PW) O:1 4 p
G:2 DLT (Diagonal Lattice Top) 2x4 Fr 1x6 T&G Y-Brds O:2 12PCS
G:3 Diagonal Lattice - 5/16" Lath (1x2 Framed) S.S (PW) O:3 3pc
G:4 Diagonal Lattice - 5/16" Lath (1x2 Framed) S.S (PW) O:4 6 pc
G:5 DLT (Diagonal Lattice Top) 2x4 Fr 1x6 T&G Y-Brds O:5 4 PC
G:6 SLT (Square Lattice Top) 2x3 OT3 Fr 1x4 T&G O:6 2pcs
我不想调整列表,只需要对值求和即可。
所需的结果是这样
T:1 Diagonal Lattice - 5/16" Lath (1x2 Framed) S.S (PW) U:1 16
T:2 DLT (Diagonal Lattice Top) 2x4 Fr 1x6 T&G Y-Brds U:2 13
T:3 SLT (Square Lattice Top) 2x3 OT3 Fr 1x4 T&G U:3 2
由于文本混合,至少到目前为止,我无法正确使用sumif。
标签-物品= G1:G3701 数量= O1:O3701
={sumif(Item, T1, Qty)}
={sumif(Item, T1, value(left(Qty, find("p",Qty)-1)))}
这些都不起作用。 我试图添加一个函数以将数字取出。
={sumif(Item, T1, getNumeric(Qty))}
但是,我相信它会因为相同的原因而失败。
我已经测试了getNumeric函数,它在sumif之外可以工作 我制作了一个数据透视表来提取不同的值并进行排序,这部分很容易。但是我无法将Tally值相加,或者不知道如何。
是否可以使用udf?
编辑:已修复,可提供更清晰的预期结果,对。
答案 0 :(得分:2)
假设件名缩写始终存在并且始终以P开头并且数字始终始终在其左侧,则可以使用以下公式:
import requests
from bs4 import BeautifulSoup
s = requests.Session()
r = s.get("https://angrygoldfish.aliexpress.com/store/feedback-score/1665279.html")
soup = BeautifulSoup(r.content, "html.parser")
iframe_src = soup.select_one("#detail-displayer").attrs["src"]
r = s.get(f"https:{iframe_src}")
soup = BeautifulSoup(r.content, "html.parser")
for row in soup.select(".history-tb tr"):
print("\t".join([e.text for e in row.select("th, td")]))
要处理数字不带“ pcs”的情况,请在其后键入文本。换句话说,它实际上是一个数字。我会使用一个助手列来去除数字,然后使用该助手列求和来执行sumif或sumifs类型的函数。
相同的公式适用于新的示例数据,并针对新列进行了调整:
=SUMPRODUCT(($A$1:$A$6=C1)*LEFT($B$1:$B$6,SEARCH("p",$B$1:$B$6)-1))