首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >只有在有限且非零时,才将值从一个系列/ DataFrame复制到另一个系列/

只有在有限且非零时,才将值从一个系列/ DataFrame复制到另一个系列/
EN

Stack Overflow用户
提问于 2017-04-16 10:09:16
回答 1查看 562关注 0票数 1

我有一个系列,它有值和零,它在给定的时间点上保存当前读数(newv)。零表示给定的一组读数没有新的读数。我想用最后一个已知值(vals)来维护另一个系列。

为此,您应该能够将保存当前值的系列中的非零值复制到具有最后一个已知值的值中,并且在读取当前值为零时(由此产生的vals)保留上一个已知值中的值。

如何将这些数据结构维护为系列和数据帧?

例如。

考虑到vals = pd.Series([1, 2, 3, 4, 5, 6, 7, 8, 9])newv = pd.Series([0, 22, 0, 44, 0, 0, 0, 0, 0]),我想到达vals = pd.Series([1, 22, 3, 44, 5, 6, 7, 8, 9])

在下一次迭代中,给定vals = pd.Series([1, 22, 3, 44, 5, 6, 7, 8, 9])newv = pd.Series([11, 0, 33, 0, 0, 0, 0, 0, 0]),我想到达vals = pd.Series([11, 22, 33, 44, 5, 6, 7, 8, 9])

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-16 10:41:59

好的,通过更新的例子,我认为只要给vals赋新的值,newv就会大于零。这样做吧:

代码语言:javascript
复制
vals = pd.Series([1, 2, 3, 4, 5, 6, 7, 8, 9])
newv = pd.Series([0, 22, 0, 44, 0, 0, 0, 0, 0])
vals.loc[newv>0] = newv

如果您有一个带有几个新的迭代列的DataFrame,您可以创建一个列,其中包含最后一个已知值,如下所示:

代码语言:javascript
复制
df = pd.DataFrame()
df['vals'] = [1, 2, 3, 4, 5, 6, 7, 8, 9]
df['new1'] = [0, 22, 0, 44, 0, 0, 0, 0, 0]
df['new2'] = [11, 0, 33, 0, 0, 0, 0, 0, 0]
df['last_known'] = df.apply(lambda x: x[x>0].iloc[-1], axis=1)

或者,您可以在df的列上应用前面的答案方法,并在每次迭代中获取当前值:

代码语言:javascript
复制
df.apply(pd.Series.replace, axis=1, to_replace=0, method='ffill')

它将产生

代码语言:javascript
复制
   vals  new1  new2
0     1     1    11
1     2    22    22
2     3     3    33
3     4    44    44
4     5     5     5
5     6     6     6
6     7     7     7
7     8     8     8
8     9     9     9

原答案如下

可以这样做:用NaNs替换级数中的零值,然后使用fillna方法向前填充缺失的值。示例:

代码语言:javascript
复制
import pandas as pd
import numpy as np

s1 = pd.Series([1,2,3,0,0,0,4,0,5])
s2 = s1.replace({0:np.NaN}).fillna(method='ffill')

这是s2中的结果

代码语言:javascript
复制
0    1.0
1    2.0
2    3.0
3    3.0
4    3.0
5    3.0
6    4.0
7    4.0
8    5.0

正如@ayhan在注释中所建议的那样,一种更好的方法是使用带有方法参数的replace

代码语言:javascript
复制
s2 = s1.replace(0, method='ffill')
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43436060

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档