1

我想根据已提交列的值替换缺失值。

在下面找到我所拥有的:

国家 已提交 年龄12 年龄14
2018 1 267
2019
2020 1 244 203
2018 ALB 1 163 165
2019 ALB 1
2020 ALB 1 161
2018 GER 1 451 381
2019 GER
2020 GER 1 361 321

这是我想要的:

国家 已提交 年龄12 年龄14
2018 1 267
2019 267
2020 1 244 203
2018 ALB 1 163 165
2019 ALB 1
2020 ALB 1 161
2018 GER 1 451 381
2019 GER 451 381
2020 GER 1 361 321

我尝试使用命令 df.fillna(axis=0, method='ffill') 但这将所有值 NaN 替换为之前的值,但这不是我想要的,因为如果“提交”列,某些值应保留为 NaN值为 1。

只有当相应的“提交”值为“NaN”时,我才想更改前一行的值。

谢谢

4

4 回答 4

1

尝试where与您所做的一起使用:

 df = df.where(~df.Sumbitted.isnull(), df.fillna(axis=0, method='ffill'))

Submitted这将仅在为空时替换条目。

于 2021-09-04T12:57:47.943 回答
0

你可以做一个条件ffill()使用np.where

import numpy as np
(
    df.assign(Age12=np.where(df.Submitted.isna(), df.Age12.ffill(), df.Age12))
    .assign(Age14=np.where(df.Submitted.isna(), df.Age14.ffill(), df.Age14))
)
于 2021-09-04T12:58:02.790 回答
0

您可以使用.filter()选择相关列并将列放入列表中cols。然后,使用when is.mask()通过前向填充来更改选定列的值,如下所示:ffill()SubmittedNaN

cols = df.filter(like='Age').columns

df[cols] = df[cols].mask(df['Submitted'].isna(), df[cols].ffill())

结果:

print(df)

   Year Country  Submitted  Age12  Age14
0  2018     CHI        1.0  267.0    NaN
1  2019     CHI        NaN  267.0    NaN
2  2020     CHI        1.0  244.0  203.0
3  2018     ALB        1.0  163.0  165.0
4  2019     ALB        1.0    NaN    NaN
5  2020     ALB        1.0  161.0    NaN
6  2018     GER        1.0  451.0  381.0
7  2019     GER        NaN  451.0  381.0
8  2020     GER        1.0  361.0  321.0
于 2021-09-04T13:06:52.780 回答
0

我只是使用了一个 for 循环来检查和更新数据框中的值

import pandas as pd
new_data = [[2018,'CHI',1,267,30], [2019,'CHI','NaN','NaN','NaN'], [2020,'CHI',1,244,203]]
df = pd.DataFrame(new_data, columns = ['Year','Country','Submitted','Age12','Age14'])
prevValue12 = df.iloc[0]['Age12']
prevValue14 = df.iloc[0]['Age14']
for index, row in df.iterrows():
    if(row['Submitted']=='NaN'):
        df.at[index,'Age12']=prevValue12
        df.at[index,'Age14']=prevValue14
    prevValue12 = row['Age12']
    prevValue14 = row['Age14']
print(df)

输出

Year Country Submitted Age12 Age14
0  2018     CHI         1   267    30
1  2019     CHI       NaN   267    30
2  2020     CHI         1   244   203
于 2021-09-04T13:26:02.003 回答