擅长:python、mysql、java
<p>这是一个非熊猫的解决方案。从生成的字典中,可以有效地映射到列。在</p>
<pre><code>from collections import defaultdict
import pandas as pd
df = pd.DataFrame([['l1A', 'l2A', 0.20],
['l1A', 'l2A', 0.30],
['l1B', 'l2A', 0.15],
['l1C', 'l26', 0.05],
['l1D', 'l27', 0.30]],
columns=['lvl1', 'lvl2', 'wgt'])
results = defaultdict(lambda: defaultdict(float))
arr = df.values
for i in range(1, 3):
for x in sorted(np.unique(arr[:, i-1])):
results[i][x] = np.mean(arr[np.where(arr[:, i-1]==x)][:, 2])
df['avg_lvl'+str(i)] = df['lvl'+str(i)].map(results[i])
# lvl1 lvl2 wgt avg_lvl1 avg_lvl2
# 0 l1A l2A 0.20 0.25 0.216667
# 1 l1A l2A 0.30 0.25 0.216667
# 2 l1B l2A 0.15 0.15 0.216667
# 3 l1C l26 0.05 0.05 0.050000
# 4 l1D l27 0.30 0.30 0.300000
</code></pre>
<p>对于这个微型数据集,我看到以下3个响应的性能:</p>
^{pr2}$