<p>我可能把解决方案复杂化了一点,但在我看来,快速解决方案就是这样的:<br/><br/>
第1部分:计算QID的唯一计数和E的最大值</p>
<pre><code>df_tempA = df.groupby(["ID", "VID"]).agg({
'QID':"nunique",
'E': "max"
}).reset_index().rename(columns={'QID':"QIDCount",'E':"MaxE"})
print(df_tempA)
ID VID QIDCount MaxE
0 121 212 2 5
1 223 244 1 2
2 313 232 2 3
3 454 969 1 4
</code></pre>
<p>第2部分:与原始数据帧连接</p>
<pre><code>df_result = pd.merge(df, df_tempA, on=["ID", "VID"])
print(df_result)
ID VID QID A B C D E QIDCount MaxE
0 121 212 123 1 2 1 1 1 2 5
1 121 212 435 1 2 1 1 5 2 5
2 223 244 567 2 3 5 1 2 1 2
3 313 232 709 5 1 2 1 3 2 3
4 313 232 887 5 1 2 1 2 2 3
5 454 969 457 1 3 2 2 4 1 4
6 454 969 457 1 2 1 2 4 1 4
</code></pre>
<p>第3部分:根据条件创建分数列</p>
<pre><code>df_result['Score'] = df_result.apply(lambda df: df['A']*df['B']*df['C']*df['D']*df['E']
if df['QIDCount'] ==1
else df['A']*df['B']*df['C']*df['D']*df['MaxE'],
axis=1)
print(df_result)
ID VID QID A B C D E QIDCount MaxE Score
0 121 212 123 1 2 1 1 1 2 5 10
1 121 212 435 1 2 1 1 5 2 5 10
2 223 244 567 2 3 5 1 2 1 2 60
3 313 232 709 5 1 2 1 3 2 3 30
4 313 232 887 5 1 2 1 2 2 3 30
5 454 969 457 1 3 2 2 4 1 4 48
6 454 969 457 1 2 1 2 4 1 4 16
</code></pre>