我有一个如下所示的数据框:
df = pd.DataFrame({'Planets': ['Mars','Mars','Mars', 'Jupyter', 'Venus', 'Venus', 'Mercury'], 'Rank': [1,np.nan, np.nan, 2, 3, np.nan, 4]})
我希望根据Planet条目的并发性更新Rank列(其中有空值)。例如,在Rank列中的条目“1”之后存在空值时,我们将使用1填充接下来的两个空行。
答案 0 :(得分:2)
您可以使用ffill(前向填充):
In [11]: df
Out[11]:
Planets Rank
0 Mars 1
1 Mars NaN
2 Mars NaN
3 Jupyter 2
4 Venus 3
5 Venus NaN
6 Mercury 4
In [12]: df["Rank"].ffill()
Out[12]:
0 1
1 1
2 1
3 2
4 3
5 3
6 4
Name: Rank, dtype: float64
In [13]: df["Rank"] = df["Rank"].ffill()
In [14]: df
Out[14]:
Planets Rank
0 Mars 1
1 Mars 1
2 Mars 1
3 Jupyter 2
4 Venus 3
5 Venus 3
6 Mercury 4
答案 1 :(得分:1)
假设您希望按等级排序最终结果:
>>> df.sort(['Planets', 'Rank']).ffill().sort('Rank')
Planets Rank
0 Mars 1
1 Mars 1
2 Mars 1
3 Jupyter 2
4 Venus 3
5 Venus 3
6 Mercury 4
完全不同的方法是使用字典理解来映射独特的行星:
df['Rank'] = df.Planets.map({planet: n for n, planet in enumerate(df.Planets.unique())})
>>> df
Planets Rank
0 Mars 0
1 Mars 0
2 Mars 0
3 Jupyter 1
4 Venus 2
5 Venus 2
6 Mercury 3