python - 仅当有限且非零时将值从一个系列/数据帧复制到另一个系列/数据帧,并在非有限且零时保留现有值

标签 python pandas dataframe series

我有一个包含值和零的系列,它保存给定时间点的当前读数( 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])

最佳答案

好的,通过更新的示例,我认为您只需要在 newv 大于零的情况下为 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.loc[newv>0] = newv

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

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 的列,并在每次迭代时获取当前值:

df.apply(pd.Series.replace, axis=1, to_replace=0, method='ffill')

这将产生

   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
<小时/>

原始答案如下

您可以通过用 NaN 替换系列中的零值,然后使用 fillna 方法向前填充缺失值来实现此目的。示例:

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 中的结果:

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 与方法参数一起使用:

s2 = s1.replace(0, method='ffill')

关于python - 仅当有限且非零时将值从一个系列/数据帧复制到另一个系列/数据帧,并在非有限且零时保留现有值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43436060/

相关文章:

python - 在Python中自定义散点图的气泡大小

python-3.x - 过滤多边形内的 GeoPandas 数据框,并从数据框中删除不存在的数据框

python - 如何按列值对 python pandas 数据帧进行分位数,然后对每个分位数求和?

python - 从组外收集值列表

python - Python新手问题: How to create crosstabs across multiple predictor variables and outcome variable

python - 将列添加到数据透视表( Pandas )

r - 从数据框到顶点/边数组

python - 如何为 Windows 获取预构建的 *debug* 版本的 Python 库(例如 Python27_d.dll)

python - Django、python、mod_wsgi 和 Apache worker

python - 为什么 subprocess.Popen 类没有命名为 Subprocess?