<p>您可以使用:</p>
<pre><code>#replace all - values to NaN
input_df = input_df.replace('-',np.nan)
#all values end with _2 and longer as 7
mask = (input_df.Sample.str.endswith('_2')) & (input_df.Sample.str.len() > 7)
#create new columnn same with column Sample + remove last 2 chars (_2)
input_df.ix[mask, 'same'] = input_df.ix[mask, 'Sample'].str[:-2]
#replace NaN in same by Sample column
input_df.same = input_df.same.combine_first(input_df.Sample)
#sort values
input_df = input_df.sort_values(['same','Family History'], ascending=False)
#replace NaN by forward filling
input_df[['Age','Family History','Diagnosis']] =
input_df[['Age','Family History','Diagnosis']].ffill()
#get original index by sorting
input_df.sort_index(inplace=True)
#remove column same
input_df.drop('same', axis=1, inplace=True)
print (input_df)
Sample Date Age Family History Diagnosis
0 HG_12_34 12/3/12 23 Y Jerusalem Syndrome
1 LG_3_45 3/4/12 45 N Paris Syndrome
2 HG_12_34_2 4/5/13 23 Y Jerusalem Syndrome
3 KD_89_9 8/9/12 54 Y Chronic Hiccups
4 KD_98_9_2 6/1/13 54 Y Chronic Hiccups
5 LG_3_45_2 4/4/10 59 N Dangerous Sneezing Syndrome
</code></pre>
<hr/>
<pre><code>print (desired_df)
Sample Date Age Family History Diagnosis
0 HG_12_34 12/3/12 23 Y Jerusalem Syndrome
1 LG_3_45 3/4/12 45 N Paris Syndrome
2 HG_12_34_2 4/5/13 23 Y Jerusalem Syndrome
3 KD_89_9 8/9/12 54 Y Chronic Hiccups
4 KD_98_9_2 6/1/13 54 Y Chronic Hiccups
5 LG_3_45_2 4/4/10 59 N Dangerous Sneezing Syndrome
</code></pre>