【问题标题】:Insert value form previous cell从上一个单元格插入值
【发布时间】:2021-03-22 21:40:56
【问题描述】:

我正在使用 Pandas 来操作表格。我需要用以前的值替换“....”的重复字段

Code
ABC
....
....
....
123
....
....
....

应该是

Code
ABC
ABC
ABC
ABC
123
123
123
123

我认为类似于 df['Code'] == df['Code'].shift().fillna(-1) 但无法弄清楚如何逐行执行(9000 行)

谢谢

【问题讨论】:

    标签: python pandas dataframe loops


    【解决方案1】:

    ....替换为缺失值NaNs,然后向前填充之前的无缺失值:

    df['Code'] = df['Code'].replace('....', np.nan).ffill()
    

    编辑:

    试图在 DataFrame 中的切片副本上设置值。尝试改用 .loc[row_indexer,col_indexer] = value

    表示之前的某些行中使用了过滤,如果您稍后修改df中的值,您会发现修改不会传播回原始数据(df1),并且Pandas会发出警告:

    df = df1[df1['col'] == 1]
    
    df['Code'] = df['Code'].replace('....', np.nan).ffill()
    

    解决方案是使用DataFrame.copy:

    df = df1[df1['col'] == 1].copy()
    
    df['Code'] = df['Code'].replace('....', np.nan).ffill()
    

    【讨论】:

    • 谢谢 - 但是它的错误是 A value is trying to be set on a copy of a slice from DataFrame。尝试改用 .loc[row_indexer,col_indexer] = value
    • 谢谢 - 完美
    【解决方案2】:

    你也可以试试这个:

    df['Code'].replace('....',method='ffill',inplace=True)
    

    method 参数将帮助您完成工作,而不是单独调用ffill()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多