我有一个数据框,想用基于另一列的相同值填充基于前几行的所有空列值?

我有一个如下所示的数据框。我想从存在相同值(“名称”)的前一行复制一个列值。


df: 


Name    Age   Ethnicity

Sam     17    E

Chris   0     B

Tom     19    P

Sam     22    NaN

Chris   18    NaN

Tom     7     NaN

这就是我想要的:


Name    Age   Ethnicity

Sam     17    E

Chris   0     B

Tom     19    P

Sam     22    E

Chris   18    B

Tom     7     P


倚天杖
浏览 136回答 2
2回答

Qyouu

你可以试试条件填充df = pd.DataFrame([["Sam" ,    17 ,   "E"],["Chris" ,  0  ,   "B"],["Tom"  ,   19  ,  "P"],["Sam"  ,   22  ,  np.nan],["Chris" ,  18  ,  np.nan],["Tom"  ,   7  ,   np.nan],              ] ,columns=['Name', "Age", "Ethnicity"])然后 df.loc[df.Ethnicity.isnull(), 'Ethnicity'] = \              df.loc[df.Ethnicity.isnull(), 'Name'].map(df.loc[df.Ethnicity.notnull()] \                .set_index('Name')['Ethnicity'])输出:    Name    Age Ethnicity0   Sam     17  E1   Chris   0   B2   Tom     19  P3   Sam     22  E4   Chris   18  B5   Tom     7   P但是,如果您确定 NaN 值的名称始终具有相应的名称,那么您可以使用 group bydf["Ethnicity"] = df.groupby('Name').ffill()["Ethnicity"]

白衣非少年

如果需要,请尝试排序和 ffill()。最后 sort_index()。如下所示。我使用了随机 dfdf = pd.DataFrame({'A':['a', 'c', 'f',  'a','c','f'],    'B' :[3, 4, 2,10,3, 1],    'C':[np.nan, np.nan, np.nan, 12,13,14]  })print(df.sort_values(by=['A','C']).ffill().sort_index())
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python