【问题标题】:How to fill missing values in pandas using shift at specified intervals?如何在指定的时间间隔使用 shift 填充 pandas 中的缺失值?
【发布时间】: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 应该有……?”因为它应该像这个原始数据框有错误的映射

标签: python pandas dataframe nan missing-data


【解决方案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

【讨论】:

  • 很好,先生,您认为我可以用它来填补我之前的问题中缺少的坐标吗?
  • 可能是,我仍然不知道您在寻找什么。我很乐意提供帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-06
  • 2021-12-20
  • 2021-03-23
  • 2013-01-18
  • 1970-01-01
相关资源
最近更新 更多