如何在指定的时间间隔使用 shift 填充 pandas 中的缺失值?
Posted
技术标签:
【中文标题】如何在指定的时间间隔使用 shift 填充 pandas 中的缺失值?【英文标题】:How to fill missing values in pandas using shift at specified intervals? 【发布时间】:2020-02-03 23:10:10 【问题描述】:我有一个看起来像这样的数据框:
+---------+---------+
| Value A | Value B |
+---------+---------+
| 10 | 1 |
| 20 | 2 |
| 30 | 3 |
| 40 | 4 |
| 50 | 5 |
| 60 | NaN |
| 70 | NaN |
| 80 | NaN |
| 90 | NaN |
| 100 | NaN |
+---------+---------+
我想用以前的值填充这些缺失的值,但如下所示。
+---------+---------+
| Value A | Value B |
+---------+---------+
| 10 | 1 |
| 20 | 1 |
| 30 | 2 |
| 40 | 2 |
| 50 | 3 |
| 60 | 3 |
| 70 | 4 |
| 80 | 4 |
| 90 | 5 |
| 100 | 5 |
+---------+---------+
问题是这些缺失值可能在任一列中。我试图手动完成,但这需要很多时间。填充值也取决于 A 列的len()
。我的方法是这样的:
missing_data_len = len(valueA)-len(valueB)
df['ValueB'].shift(missing_data_len)
然后使用ffill
填写NaN 值。但结果并不准确。有没有更好的方法来解决这个问题。
【问题讨论】:
df['ValueB'].shift(missing_data_len)
立即成为一个问题。这不起作用,所以它只是被扔掉了
"但移动如下所示。"。您显示的不是shift
。 Shift 只是移动值,而不是用值替换 NaN
。为什么 20
现在应该有 1
的对应值,而之前是 2
?
听起来你的 NaN 没有一致性,所以对于如何填充它们没有通用规则,那么你希望 python 如何填充它们?
@Aryerez 我们知道两列的 len 如果我们将 B 列中的最后一个值移动 diff_len-1 ,然后对剩余的值也这样做。然后使用 ffill 或 bfill 填充 NaN。
@roganjosh 我刚刚尝试过,我知道这是错误的,但我想知道我想做什么。可能有更好的方法,一种有效的方法。 “为什么现在 20 应该有……?”因为它应该像这个原始数据框有错误的映射
【参考方案1】:
用途:
null=df['Value_B'].isnull()
r=(len(df)/null.sum())
df['Value_B']=df.loc[~null,'Value_B'].repeat(r).reset_index(drop=True)
Value_A Value_B
0 10 1.0
1 20 1.0
2 30 2.0
3 40 2.0
4 50 3.0
5 60 3.0
6 70 4.0
7 80 4.0
8 90 5.0
9 100 5.0
【讨论】:
很好,先生,您认为我可以用它来填补我之前的问题中缺少的坐标吗? 可能是,我仍然不知道您在寻找什么。我很乐意提供帮助以上是关于如何在指定的时间间隔使用 shift 填充 pandas 中的缺失值?的主要内容,如果未能解决你的问题,请参考以下文章
pandas基于shift偏移dataframe中时间列计算相邻两列的时间差如果shift参数为1则指定列向下移动1个位置,使用后向填充进行缺失值填充