熊猫:如果满足条件,则将列的值替换为上一行的值

时间:2020-07-08 02:15:18

标签: python pandas

我有一个从txt文件导入的DataFrame,其结构如下:

            ID   Place            Name        Other
0    123456789    1100           NAME1      5468.85
1      NUMBER1    1100    DESCRIPTION1     
2         STR1            DESCRIPTION2       
3      NUMBER2                            OTHER_STR
4    987654321    1100           NAME2      4566.65
1      NUMBER1    1100    DESCRIPTION1     
2         STR1            DESCRIPTION2     

我想检查类似以下代码的内容,但是我知道通过df进行迭代是一种不好的做法,而且我不是熊猫专家:

for row in df:
    if row['Other'] == '' or row['Place'] == '':
        row['ID'] == previous_row['ID']

输出应如下所示:

            ID   Place            Name        Other
0    123456789    1100           NAME1      5468.85
1    123456789    1100    DESCRIPTION1     
2    123456789            DESCRIPTION2       
3    123456789                            OTHER_STR
4    987654321    1100           NAME2      4566.65
1    987654321    1100    DESCRIPTION1     
2    987654321            DESCRIPTION2     

请注意,任何行都可以是STR,INT或空白。数据集有点多于100万行乘15列,因此需要快速。

我尝试了建议的here,但是它并不能完全确定要更新列值的条件。

1 个答案:

答案 0 :(得分:3)

使用pandas.Series.ffill

s = df["Place"].eq("") | df["Other"].eq("")
df.loc[s, "ID"] = pd.np.nan
df["ID"].ffill(inplace=True)
print(df)

输出:

          ID Place          Name      Other
0  123456789  1100         NAME1    5468.85
1  123456789  1100  DESCRIPTION1           
2  123456789        DESCRIPTION2           
3  123456789                      OTHER_STR
4  987654321  1100         NAME2    4566.65
1  987654321  1100  DESCRIPTION1           
2  987654321        DESCRIPTION2