考虑以下pandas数据帧:

import pandas as pd

change = [0.475, 0.625, 0.1, 0.2, -0.1, -0.75, 0.1, -0.1, 0.2, -0.2]

position = [1.0, 1.0, nan, nan, nan, -1.0, nan, nan, nan, nan]

date = ['20150101', '20150102', '20150103', '20150104', '20150105', '20150106', '20150107', '20150108', '20150109', '20150110']

pd.DataFrame({'date': date, 'position': position, 'change': change})

输出

date change position

20150101 0.475 1

20150102 0.625 1

20150103 0.1 np.nan

20150104 0.2 np.nan

20150105 -0.1 np.nan

20150106 -0.75 -1

20150107 0.1 np.nan

20150108 -0.1 np.nan

20150109 0.2 np.nan

20150110 -0.2 np.nan

我想用以下规则填写:

>对于“位置”值为np.nan的行,如果“change”的值与position的最后一个非null值具有相同的符号(change * position> 0,例如0.1 * 1和0.2 * 1> 0 ),我们用最后一个非空值填充.

>对于“位置”值为np.nan的行,如果“change”的值与position的最后一个非null值相同的符号(change * position< = 0,如-1 * 0.1),我们fillna 0.

>一旦np.nan填充为0,则以下np.nan也将填充0.

以下是样本数据框的预期结果:

date change position

20150101 0.475 1

20150102 0.625 1

20150103 0.1 1

20150104 0.2 1

20150105 -0.1 0

20150106 -0.75 -1

20150107 0.1 0

20150108 -0.1 0

20150109 0.2 0

20150110 -0.2 0

编辑:

我开发的方法如下:

while(any(np.isnan(x['position']))):

conditions = [(np.isnan(x['position'])) & (x['position'].shift(1) * x['change'] > 0),

(np.isnan(x['position'])) & (x['position'].shift(1) * x['change'] <= 0)]

choices = [x['position'].shift(1), 0]

x['position'] = np.select(conditions, choices, default=x['position'])

但正如你所看到的,它不是很令人满意,而且如果你有80,000,000行数据则非常慢.

有什么建议?谢谢您的帮助!

python中fillna函数_在pandas dataframe中写一个用户定义的fillna函数,用条件填充np.nan不同的值...相关推荐

  1. python提取数列数字_从pandas datafram中的列中提取字符串中的数字

    只要字符串Incorrect_Price保持您在示例中呈现的结构(数字不是用文字表示的),任务就可以相对容易地解决.在 使用正则表达式,您可以使用similar SO question中的方法提取数字 ...

  2. python中convert函数用法_Python Pandas DataFrame.tz_convert用法及代码示例

    Pandas DataFrame是带有标签轴(行和列)的二维大小可变的,可能是异构的表格数据结构.算术运算在行和列标签上对齐.可以将其视为Series对象的dict-like容器.这是 Pandas ...

  3. python交换两列的位置_如何更改 pandas dataframe 中两列的位置

    如何更改 pandas dataframe 中两列的位置: 把其中的某列移到第一列的位置. 原来的 df 是: df = pd.read_csv('I:/Papers/consumer/codeand ...

  4. pandas dataframe 中 explode()函数用法及效果

            最近在使用pyspark处理数据,需要连接各种各样的表和字段,因此记录相关函数的使用情况.今天介绍explode(). 1. explode()函数简介 explode 函数是 pan ...

  5. pandas使用iteritems函数迭代地查看dataframe中的每个数据列(iterate over each column of a dataframe)

    pandas使用iteritems函数迭代地查看dataframe中的每个数据列(iterate over each column of a dataframe) 目录 pandas使用iterite ...

  6. pandas使用replace函数替换dataframe中的值:replace函数使用正则表达式对dataframe中的值进行替换

    pandas使用replace函数替换dataframe中的值:replace函数使用正则表达式对dataframe中的值进行替换 目录

  7. python dataframe增加一行_python - 在pandas.DataFrame中添加一行

    python - 在pandas.DataFrame中添加一行 据我所知,pandas旨在加载完全填充的DataFrame,但我需要创建一个空的DataFrame,然后逐个添加行.做这个的最好方式是什 ...

  8. 在Pandas DataFrame中重塑数据

    目录 介绍 透视Pandas DataFrame 在Pandas DataFrame中对数据进行分组 总结 使用我们的数据集后,我们将快速查看可以使用流行的Python库从数据集轻松创建的可视化,然后 ...

  9. python将ElasticSearch索引数据读入pandas dataframe实战

    python将ElasticSearch索引数据读入pandas dataframe实战 # 导入基础包和库 import pandas as pdpd.set_option('display.max ...

最新文章

  1. 客快物流大数据项目(九):Docker常用命令
  2. 为何Redis要比Memcached好用(转)
  3. Android之创建简单的ProgressDialog
  4. python中文软件-Python
  5. MPLS/×××分解:防止PE-CE的路由环路
  6. UA MATH571A R语言回归分析实践 一元回归2 NBA球员的工资
  7. 文本处理利器Linux Awk这样入门☛常见变量的使用
  8. python列表中数据类型可以不同吗_Python改变列表中数据类型的方法
  9. Full_of_Boys训练2总结
  10. Linux的帧缓冲设备
  11. TPL 和传统 .NET Framework 异步编程
  12. 用python绘制熊猫图案_绘制带有熊猫和Matplotlib的一分钟烛台
  13. 精选的 Go 框架,库和软件的精选清单
  14. Newton tangent method
  15. R星安装不完全无法载入social club(错误码:1)解决办法
  16. 微信,支付宝,收款二维码实时生成订单监控,免签支,付支付系统,个人收款,收款二维码...
  17. jquery mouse事件小坑
  18. 20176408李俊 线性表
  19. Array.reduce()的用法与进阶
  20. 某大学生写给女朋友的信

热门文章

  1. 海思QT开发系列(一):3559平台QT移植
  2. Excel中图片网页链接直接显示
  3. 李晓应想对他爱的訾先梦说的话
  4. JavaScript【十一】2022.5.23第十三周
  5. pika.exceptions.ChannelWrongStateError: Channel is closed.
  6. XP系统目录服务器恢复模式,WinXP高级启动选项功能介绍
  7. 青龙面板拉库命令大全最新【实时更新中......】
  8. 软件开发中的破窗效应
  9. NodeJS 导入包的时候出现的 @types 错误导致程序无法运行
  10. iphone新旧手机数据传输已取消_这个便捷的手机数据迁移工具,让数据搬家不再困难...