如何根据另一列的字符串值更新一列的行? Python熊猫

时间:2015-10-22 12:30:06

标签: python numpy pandas

我有一个如下所示的数据框:

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填充接下来的两个空行。

2 个答案:

答案 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