<p>除去所有的循环,您可以通过合并有效地完成这一点。这里我提供了一些示例数据,因为您提供的所有数据实际上都不会合并。如果<code>df</code>中的<code>release_date</code>不是日期时间,则需要确保它是日期时间。你知道吗</p>
<pre><code>import pandas as pd
import numpy as np
df = pd.DataFrame({'budget': [0, 100, 0, 1000, 0],
'production_company': ['Villealfa Filmproduction Oy', 'Villealfa Filmproduction Oy',
'Villealfa Filmproduction Oy', 'Miramax Films', 'Miramax Films'],
'release_date': ['10/21/1988', '10/18/1986', '12/25/1955', '1/1/2006', '4/13/2017'],
'title': ['AAA', 'BBB', 'CCC', 'DDD', 'EEE']})
df1 = pd.DataFrame({'production_companies': ['Villealfa Filmproduction Oy', 'Villealfa Filmproduction Oy',
'Villealfa Filmproduction Oy', 'Miramax Films', 'Miramax Films'],
'release_year': [1988, 1986, 1955, 2006, 2017],
'mean': [1000000, 2000000, 30000000, 4000000, 5000000]})
df['release_date'] = pd.to_datetime(df.release_date, format='%m/%d/%Y')
# budget production_company release_date title
#0 0 Villealfa Filmproduction Oy 1988-10-21 AAA
#1 100 Villealfa Filmproduction Oy 1986-10-18 BBB
#2 0 Villealfa Filmproduction Oy 1955-12-25 CCC
#3 1000 Miramax Films 2006-01-01 DDD
#4 0 Miramax Films 2017-04-13 EEE
</code></pre>
<p>然后,如果生产公司和年份匹配,您需要将预算值为0的地方替换为平均值。作为合并,这是:</p>
<pre><code>df.loc[df.budget==0, 'budget'] = (df.merge(df1, left_on=['production_company',
df.release_date.dt.year], right_on=['production_companies', 'release_year'], how='left')
.loc[df.budget==0, 'mean'])
# budget production_company release_date title
#0 1000000 Villealfa Filmproduction Oy 1988-10-21 AAA
#1 100 Villealfa Filmproduction Oy 1986-10-18 BBB
#2 30000000 Villealfa Filmproduction Oy 1955-12-25 CCC
#3 1000 Miramax Films 2006-01-01 DDD
#4 5000000 Miramax Films 2017-04-13 EEE
</code></pre>
<p>如果没有给定生产公司和年份的<code>mean</code>数据,<code>budget</code>中的<code>0</code>将替换为<code>np.NaN</code>,因此您可以保留它们,也可以根据需要将它们替换回0。你知道吗</p>