回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我可以对python代码进行哪些改进以提高效率?对于我的情况,我有这个数据帧</p>
<pre><code>In [1]: df = pd.DataFrame({'PersonID': [1, 1, 1, 2, 2, 2, 3, 3, 3],
'Name': ["Jan", "Jan", "Jan", "Don", "Don", "Don", "Joe", "Joe", "Joe"],
'Label': ["REL", "REL", "REL", "REL", "REL", "REL", "REL", "REL", "REL"],
'RuleID': [55, 55, 55, 3, 3, 3, 10, 10, 10],
'RuleNumber': [3, 4, 5, 1, 2, 3, 234, 567, 999]})
</code></pre>
<p>结果如下:</p>
<pre><code>In [2]: df
Out[2]:
PersonID Name Label RuleID RuleNumber
0 1 Jan REL 55 3
1 1 Jan REL 55 4
2 1 Jan REL 55 5
3 2 Don REL 3 1
4 2 Don REL 3 2
5 2 Don REL 3 3
6 3 Joe REL 10 234
7 3 Joe REL 10 567
8 3 Joe REL 10 999
</code></pre>
<p>这里我需要完成的是将Label列下的字段更新为MAIN,以获得与应用于个人ID和姓名的每个规则ID相关联的最低规则值。因此,结果需要如下所示:</p>
<pre><code>In [3]: df
Out[3]:
PersonID Name Label RuleID RuleNumber
0 1 Jan MAIN 55 3
1 1 Jan REL 55 4
2 1 Jan REL 55 5
3 2 Don MAIN 3 1
4 2 Don REL 3 2
5 2 Don REL 3 3
6 3 Joe MAIN 10 234
7 3 Joe REL 10 567
8 3 Joe REL 10 999
</code></pre>
<p>这是我为实现这一点而编写的代码:</p>
<pre><code>In [4]:
df['Label'] = np.where(
df['RuleNumber'] ==
df.groupby(['PersonID', 'Name', 'RuleID'])['RuleNumber'].transform('min'),
"MAIN", df.Label)
</code></pre>
<p>是否有更好的方法更新标签列下的值?我觉得我是在用蛮力逼我过去,这可能不是最有效的方法</p>
<p>我使用了以下SO线程来获得结果:</p>
<p><a href="https://stackoverflow.com/questions/48142757/replace-column-values-within-a-groupby-and-condition">Replace column values within a groupby and condition</a></p>
<p><a href="https://stackoverflow.com/questions/50418372/replace-values-within-a-groupby-based-on-multiple-conditions?noredirect=1&lq=1">Replace values within a groupby based on multiple conditions</a></p>
<p><a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.idxmin.html" rel="nofollow noreferrer">https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.idxmin.html</a></p>
<p><a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.transform.html" rel="nofollow noreferrer">https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.transform.html</a></p>
<p><a href="https://stackoverflow.com/questions/41450963/using-pandas-to-find-minimum-values-of-grouped-rows">Using Pandas to Find Minimum Values of Grouped Rows</a></p>
<p>如有任何建议,将不胜感激</p>
<p>多谢各位</p>