<p>这是我的答案,但斯科特用一个更好的答案击败了我。你知道吗</p>
<pre><code>import numpy as np
import pandas as pd
df = pd.DataFrame([
['January','Monday',np.nan,np.nan,np.nan,1,20],\
['January','Monday',np.nan,np.nan,np.nan,2,25],\
['February','Monday',np.nan,np.nan,np.nan,1,15],\
['February','Monday',np.nan,np.nan,np.nan,2,20],\
['February','Monday',np.nan,np.nan,np.nan,3,25],\
['March','Tuesday',np.nan,np.nan,np.nan,1,50],\
['March','Wednesday',np.nan,np.nan,np.nan,1,75]],
columns = ['Month','Day','Data1','Data2', 'Data3','Count','Initial_Data'])
new = pd.DataFrame(columns = ['Month','Day','Data1','Data2', 'Data3'])
for ridx, row in df.iterrows():
new.loc[ridx] = [row['Month'], row['Day'], np.nan, np.nan, np.nan]
if row['Count'] == 1:
new.loc[new.index[ridx], 'Data1'] = row['Initial_Data']
if row['Count'] == 2:
new.loc[new.index[ridx], 'Data2'] = row['Initial_Data']
new.loc[new.index[ridx-1], 'Data2'] = row['Initial_Data']
new.loc[new.index[ridx], 'Data1'] = new.loc[new.index[ridx-1], 'Data1']
if row['Count'] == 3:
new.loc[new.index[ridx], 'Data3'] = row['Initial_Data']
new.loc[new.index[ridx-1], 'Data3'] = row['Initial_Data']
new.loc[new.index[ridx-2], 'Data3'] = row['Initial_Data']
new.loc[new.index[ridx], 'Data1'] = new.loc[new.index[ridx-1], 'Data1']
new.loc[new.index[ridx], 'Data2'] = new.loc[new.index[ridx-1], 'Data2']
print(new)
</code></pre>
<hr/>
<pre><code> Month Day Data1 Data2 Data3
0 January Monday 20 25 NaN
1 January Monday 20 25 NaN
2 February Monday 15 20 25
3 February Monday 15 20 25
4 February Monday 15 20 25
5 March Tuesday 50 NaN NaN
6 March Wednesday 75 NaN NaN
</code></pre>