为了账号安全,请及时绑定邮箱和手机立即绑定

在熊猫数据框中的缺失值中查找最接近的有效数字

在熊猫数据框中的缺失值中查找最接近的有效数字

噜噜哒 2021-09-14 15:25:20
我有一个数据集,其中包含多个不同长度的缺失序列,我想在其中找到某些特定日期在这些序列之前和之后出现的第一个有效数字。在下面的示例数据集中,我想找到ColumnB最接近日期 的有效数字2018-11-26。数据样本:Date         ColumnA   ColumnB2018-11-19   107.00      NaN2018-11-20   104.00      NaN2018-11-21   106.00      NaN2018-11-22   105.24    80.002018-11-23   104.63      NaN2018-11-26   104.62      NaN2018-11-28   104.54      NaN2018-11-29   103.91    86.882018-11-30   103.43      NaN2018-12-01   106.13      NaN2018-12-02   110.83      NaN预期输出:[80, 86.88]一些细节:如果这个特定序列是唯一一个有缺失值的序列,我将能够使用For Loops,或熊猫函数first_valid_index()或isnull()如熊猫中所述 - 在列中找到第一个非空值来解决它,但这很少是这样。我可以使用一些来解决这个问题For Loops,但是对于较大的数据集来说它很慢而且不是很优雅,所以我真的很想听听其他建议!
查看完整描述

3 回答

?
慕尼黑8549860

TA贡献1818条经验 获得超11个赞

试试这个方法,获取索引和切片,得到第一个有效数字


idx= np.where(df['Date']=='2018-11-26')[0][0]

# idx 3


num = (df.loc[df.loc[:idx,'ColumnB'].first_valid_index(),'ColumnB'],

       df.loc[df.loc[idx:,'ColumnB'].first_valid_index(),'ColumnB'])


num

(80.0, 86.879999999999995)


查看完整回答
反对 回复 2021-09-14
?
幕布斯6054654

TA贡献1876条经验 获得超7个赞

我会这样尝试:


import pandas as pd

import numpy as np


df_vld = df.dropna()


idx = np.argmin(abs(df_vld.index - pd.datetime(2018, 11,26)))

# 1


df_vld.loc[df_vld.index[idx]]

Out:

ColumnA    103.91

ColumnB     86.88

Name: 2018-11-29 00:00:00, dtype: float64


查看完整回答
反对 回复 2021-09-14
  • 3 回答
  • 0 关注
  • 137 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号