Pandas 数据框列从第一个非零值向前填充

时间:2021-04-11 11:47:48

标签: python pandas

我希望从第一个非零值向前填充特定的数据帧列,我还想为每个组执行此操作。

df = pd.DataFrame(np.array([[1, 0, 0], [1, 5, 1], [1, 8, 0],[2, 4, 0],[2, 8, 1],[2, 81, 0]]),
                   columns=['ID', 'b', 'c'])

我想要的结果是:

df2 = pd.DataFrame(np.array([[1, 0, 0], [1, 5, 1], [1, 8, 1],[2, 4, 0],[2, 8, 1],[2, 81, 1]]),
                   columns=['ID', 'b', 'c'])

尝试:

df2 = df.groupby('ID',as_index = False)['c'].apply(lambda x: x.replace(to_replace=0, method='ffill'))

问题是未返回原始数据帧。对此的任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:2)

使用 .values 属性:

df['c']=df.groupby('ID',as_index = False)['c'].apply(lambda x: x.replace(to_replace=0, method='ffill')).values

现在,如果您打印 df,您将获得所需的输出:

    ID  b   c
0   1   0   0
1   1   5   1
2   1   8   1
3   2   4   0
4   2   8   1
5   2   81  1

答案 1 :(得分:2)

试试这个 -

df['c'] = df.groupby('ID')['c'].apply(lambda x: x.replace(to_replace=0, method='ffill')) #print df after this.