如何在指定的时间间隔使用 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个位置,使用后向填充进行缺失值填充

Highcharts填充区域点间隔问题

如何在指定的时间间隔内找到数字的除数?

EXCEL表格如何在EF间插入一列新表格?

Excel自动填充到指定行

如何在R中制作渐变颜色填充时间序列图