回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>数据如下:</p>
<pre><code>datas = [
['/page_1', 1],
['/page_1?x=123', 2],
['/page_1/subpage_1', 1],
['/page_2', 10],
]
</code></pre>
<p>我打算对其应用一个自定义groupby操作,结果应该是:</p>
<pre><code>datas = [
['/page_1', 4],
['/page_2', 10],
]
</code></pre>
<p>我应该如何通过Python本身有效地实现它,或者通过Pandas方便地实现它?你知道吗</p>
<p>多谢你了。你知道吗</p>
<p>更重要的是,它可以按以下两个维度进行分组:</p>
<pre><code>#-- raw data
datas = [
['/page_1', 'China', 1],
['/page_1?x=123', 'China', 2],
['/page_1/subpage_1', 'US', 1],
['/page_2', 'Britain', 10],
]
#-- expected result
datas = [
['/page_1', 'China', 3],
['/page_1', 'US', 1],
['/page_2', 'Britain', 10],
]
</code></pre>
<p>我已经为一维groupby实现了一个场景:</p>
<pre><code>def mergeRowWithSameSuffix(datas):
curPrefix = None
curPrefixPV = 0
curPrefixUV = 0
rtn = []
for data in datas:
pagePathLevel2 = data[0].encode('utf-8').replace("'", "")
pv = int(data[1])
uv = int(data[2])
if not curPrefix:
curPrefix = pagePathLevel2
curPrefixPV = pv
curPrefixUV = uv
elif pagePathLevel2.startswith(curPrefix+"?") or pagePathLevel2.startswith(curPrefix+"/"):
curPrefixPV += pv
curPrefixUV += uv
else:
rtn.append([curPrefix, curPrefixPV, curPrefixUV])
curPrefix = pagePathLevel2
curPrefixPV = pv
curPrefixUV = uv
rtn.append([curPrefix, curPrefixPV, curPrefixUV])
return rtn
</code></pre>
<p>但这显然对二维groupby不起作用。所以我想一定有办法通过熊猫来实现。你知道吗</p>