<p>这两行代码应该可以为您解决这个问题</p>
<pre><code>df.manager2 = df.manager2.bfill().ffill()
df.loc[df.manager1.isnull(), 'manager2'] = np.NaN
</code></pre>
<p>下面是我尝试过的几个场景,代码是相同的。看看这是不是你想要的</p>
<pre><code>import pandas as pd
import numpy as np
c=['party_num','dcc3','manager1','manager2']
</code></pre>
<h2>情景1:</h2>
<p><strong>第1行:manager1=NaN,manager2=value</strong></p>
<p><strong>结果:将manager2值分配给第2行</strong></p>
<pre><code>print ('\nScenario 1')
print ('row 1: manager 1: NaN, manager 2: value; pick row2 manager 1 value')
d = [['L21635789','SBAS01030',np.NaN,'A22810282'],
['L21635789','SBAS02030','A22677981',np.NaN],
['L21635789','SBAS03030',np.NaN,'A21721880']]
df = pd.DataFrame(data=d,columns=c)
print (df)
df.manager2 = df.manager2.bfill().ffill()
df.loc[df.manager1.isnull(), 'manager2'] = np.NaN
print ()
print (df)
</code></pre>
<p>场景1的输出:</p>
<pre><code>Scenario 1
row 1: manager 1: NaN, manager 2: value; pick row2 manager 1 value
party_num dcc3 manager1 manager2
0 L21635789 SBAS01030 NaN A22810282
1 L21635789 SBAS02030 A22677981 NaN
2 L21635789 SBAS03030 NaN A21721880
party_num dcc3 manager1 manager2
0 L21635789 SBAS01030 NaN NaN
1 L21635789 SBAS02030 A22677981 A21721880
2 L21635789 SBAS03030 NaN NaN
</code></pre>
<h2>情景2:</h2>
<p><strong>第1行:manager1=value,manager2=NaN</strong></p>
<p><strong>结果:将manager2值分配给第1行</strong></p>
<pre><code>print ('\nScenario 2')
print ('row 1: manager 1: value, manager 2: NaN; pick row2 manager 2 value')
d = [['L21635789','SBAS01030','A22677981',np.NaN],
['L21635789','SBAS02030',np.NaN,'A22810282'],
['L21635789','SBAS03030',np.NaN,'A21721880']]
df = pd.DataFrame(data=d,columns=c)
print (df)
df.manager2 = df.manager2.bfill().ffill()
df.loc[df.manager1.isnull(), 'manager2'] = np.NaN
print ()
print (df)
</code></pre>
<p>场景2的输出:</p>
<pre><code>Scenario 2
row 1: manager 1: value, manager 2: NaN; pick row2 manager 2 value
party_num dcc3 manager1 manager2
0 L21635789 SBAS01030 A22677981 NaN
1 L21635789 SBAS02030 NaN A22810282
2 L21635789 SBAS03030 NaN A21721880
party_num dcc3 manager1 manager2
0 L21635789 SBAS01030 A22677981 A22810282
1 L21635789 SBAS02030 NaN NaN
2 L21635789 SBAS03030 NaN NaN
</code></pre>
<h2>情景3:</h2>
<p><strong>第1行:manager1=NaN,manager2=NaN</strong></p>
<p><strong>第2行:manager1=值;manager2=NaN;第3行:manager2=值</strong></p>
<p><strong>结果:将manager3值分配给第2行</strong></p>
<pre><code>print ('\nScenario 3')
print ('row 1: manager 1: NaN, manager 2: NaN; pick row2 manager 1 & row 3 manager 2')
d = [['L21635789','SBAS01030',np.NaN,np.NaN],
['L21635789','SBAS02030','A22677981',np.NaN],
['L21635789','SBAS03030',np.NaN,'A21721880']]
df = pd.DataFrame(data=d,columns=c)
print (df)
df.manager2 = df.manager2.bfill().ffill()
df.loc[df.manager1.isnull(), 'manager2'] = np.NaN
print ()
print (df)
</code></pre>
<p>场景3的输出:</p>
<pre><code>Scenario 3
row 1: manager 1: NaN, manager 2: NaN; pick row2 manager 1 & row 3 manager 2
party_num dcc3 manager1 manager2
0 L21635789 SBAS01030 NaN NaN
1 L21635789 SBAS02030 A22677981 NaN
2 L21635789 SBAS03030 NaN A21721880
party_num dcc3 manager1 manager2
0 L21635789 SBAS01030 NaN NaN
1 L21635789 SBAS02030 A22677981 A21721880
2 L21635789 SBAS03030 NaN NaN
</code></pre>
<h2>情景4:</h2>
<p><strong>第1行:manager1=value,manager2=NaN</strong></p>
<p><strong>第3行:manager1=value,manager2=value</strong></p>
<p><strong>结果:忽略第1行和第2行,因为第3行同时具有manager1和manager2的值</p>
<pre><code>print ('\nScenario 4')
print ('row 1: manager 1: NaN, manager 2: value; row3 has both manager 1 & manager 2')
d = [['L21635789','SBAS01030',np.NaN,'A21721880'],
['L21635789','SBAS02030',np.NaN,np.NaN],
['L21635789','SBAS03030','A22677981','A21721882']]
df = pd.DataFrame(data=d,columns=c)
print (df)
df.manager2 = df.manager2.bfill().ffill()
df.loc[df.manager1.isnull(), 'manager2'] = np.NaN
print ()
print (df)
</code></pre>
<p>场景4的输出:</p>
<pre><code>Scenario 4
row 1: manager 1: NaN, manager 2: value; row3 has both manager 1 & manager 2
party_num dcc3 manager1 manager2
0 L21635789 SBAS01030 NaN A21721880
1 L21635789 SBAS02030 NaN NaN
2 L21635789 SBAS03030 A22677981 A21721882
party_num dcc3 manager1 manager2
0 L21635789 SBAS01030 NaN NaN
1 L21635789 SBAS02030 NaN NaN
2 L21635789 SBAS03030 A22677981 A21721882
</code></pre>