python dataframe 某列将0值补充为上一个点的值

python dataframe 某列将0值补充为上一个点的值

clipboard.png

如何让10-5之间的0填充为10,5后的的0填充为5,也就是如果某点值为0,就让他等于上一个不为0的点

阅读 7.8k
2 个回答

没太明白你的需求。是不是要把open那一列的2到4行置为10,6行之后置为5?

df["open"][1:4]=10
df["open"][5:]=5

引申一下,有一个列表[10, 0, 0, 0, 5, 0, 0, 0, 1, 0, 0, 0],按我的理解,如果是这么个列表,你是希望第2到4个元素置为10,第6到8个元素置为5,第10到12个元素置为1。
可以这么做:

a=[10, 0, 0, 0, 5, 0, 0, 0, 1, 0, 0, 0]
b=[a[i] if a[i]!=0 else reduce(lambda x, y: x or y, a[i-1::-1]) for i in range(len(a))]

套到你的这个问题:

df["open"] = [df["open"][i] if df["open"][i]!=0 else reduce(lambda x, y: x or y, df["open"][i-1::-1]) for i in range(len(df["open"]))]
import pandas as pd

df = pd.DataFrame()

df['a'] = [1, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0]

for idx, val in enumerate(df['a']):
    if val == 0:
        df['a'][idx] = df['a'][idx-1]

print(df)
# 输出
    a
0   1
1   1
2   1
3   1
4   1
5   1
6   5
7   5
8   5
9   5
10  5
11  5
12  5
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题