<p>在您的第一个数据帧中,Reservation列应该已经是一个对象,因此在删除nan之后,您应该能够像这样获得第一个非nan字符:</p>
<pre><code>df['Room'] = df['Reservation'].dropna().str.get(0)
</code></pre>
<p>你的第二个问题。您正在反向使用groupby。分组列放在groupby方法中,聚合列放在外部,如下所示。在</p>
^{pr2}$
<p>然后可以使用以下内容填充缺少的值</p>
<pre><code>df.set_index(['Organization', 'Profission'])['Days_of_Reservations'].fillna(med)
</code></pre>
<p>编辑:根据您的评论,请使用以下代码进行测试</p>
<pre><code># create data for first question
df = pd.DataFrame({'Reservation': [np.nan, np.nan, 'B57 B59 B63 B66']})
# get first letter of non na
df['Room'] = df['Reservation'].dropna().str.get(0)
print(df)
</code></pre>
<p>输出</p>
<pre><code> Reservation Room
0 NaN NaN
1 NaN NaN
2 B57 B59 B63 B66 B
</code></pre>
<h3>第二个问题</h3>
<p>测试此代码</p>
<pre><code>s=''' Organization Days_of_Reservations Profission
or3 4 Doctor
or3 Nan Doctor
or2 2 Teacher
or1 3 Teacher
or1 Nan Dentist
'''
df = pd.read_csv(StringIO.StringIO(s), sep='\s+')
df['Days_of_Reservations'] = df.Days_of_Reservations.astype(float)
med = df.groupby(['Organization', 'Profission'])['Days_of_Reservations'].median()
df.set_index(['Organization', 'Profission'])['Days_of_Reservations'].fillna(med).reset_index()
</code></pre>
<p>输出</p>
<pre><code> Organization Profission Days_of_Reservations
0 or3 Doctor 4
1 or3 Doctor 4
2 or2 Teacher 2
3 or1 Teacher 3
4 or1 Dentist NaN
</code></pre>