【问题标题】:Pandas: Replace value of column with previous row value if condition is metPandas:如果满足条件,则将列的值替换为前一行的值
【发布时间】:2020-07-08 02:15:18
【问题描述】:

我有一个从 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 是一种不好的做法,而且我不是 Pandas 专家:

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 或空白。数据集略多于一百万行乘 15 列,因此需要快速。

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

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    使用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           
    

    【讨论】:

      猜你喜欢
      • 2018-10-23
      • 1970-01-01
      • 1970-01-01
      • 2014-02-11
      • 2023-01-31
      • 2022-10-07
      • 1970-01-01
      • 2020-08-18
      • 2021-08-20
      相关资源
      最近更新 更多