替换 0 并从同一行的列中向前填充 [重复]

Posted

技术标签:

【中文标题】替换 0 并从同一行的列中向前填充 [重复]【英文标题】:Replace 0s and forward fill from columns along the same row [duplicate] 【发布时间】:2020-10-31 11:56:34 【问题描述】:

我想通过从该行的前一个非零值向前填充来替换我的数据中的 0。

我使用的是以下代码,但这会替换上面行中的 0,而不是同一行:

df.replace(to_replace=0, method='ffill')

在上面的代码中,我无法将轴指定为 1。

下面的代码完全符合我的要求,但仅限于 NaN。

columns.fillna(method='ffill',axis=1)

A B C D
1 4 0 0
2 7 8 0
3 8 0 0
4 1 0 0

例如,在上面的 df 中,第一行,我想将 0 替换为“4”,对于下面的行,将 0 替换为 8。

谢谢

【问题讨论】:

D列第1行的0怎么办?你也想替换它吗? 是的,前一个对应行的所有 0 向前填充。适用于整个 df.. 所以第一行中的两个 0 分别为 4。 @MikeA 有点不清楚你想要什么。你能提供输入和预期输出吗?谢谢 一种天真的方法是将零转换为 NaN 并按照您提到的那样使用 axis=1 进行填充 @Ehsan,我想通过在前一个对应行中向前填充非零值来替换每一行中的 0。 【参考方案1】:

这应该可行:

x=pd.DataFrame('A':[1, 2, 3,4],'B':[4, 7, 8, 1],'C':[0, 8, 0, 0],'D':[0, 0, 0, 0])
x_new=x.apply(lambda y: y.replace(to_replace=0, method='ffill'),axis=1)
x_new
>>  A   B   C   D
0   1   4   4   4
1   2   7   8   8
2   3   8   8   8
3   4   1   1   1

【讨论】:

【参考方案2】:

您可以 (1) transpose (2) replace 然后 (3) transpose 再次:

df.T.replace(0, method='ffill').T
#output:
    A   B   C   D
0   1   4   4   4
1   2   7   8   8
2   3   8   8   8
3   4   1   1   1

【讨论】:

以上是关于替换 0 并从同一行的列中向前填充 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

使用 dplyr [重复] 有条件地将一列中的值替换为另一列中的值

从同一行电源查询中获取列

pandas:用列中的最后一个非 NaN 值替换 NaN [重复]

如果另一列中的值是唯一的,那么如何在SQL中放置一个显示1的列,如果它是重复的则为0?

如何获得DataGridView中某一列中全部的值?

按非主键属性分组 min(Value) 并从同一行加入附加属性(使用原始 SQL 或 SQLalchemy)