pandas - 根据列值添加缺失的行以获得 linspace

use*_*546 2 python interpolation autofill linear-interpolation pandas

我有一个像这样的熊猫数据框

     a   b  c
0  0.5  10  7
1  1.0   6  6
2  2.0   1  7
3  2.5   6 -5
4  3.5   9  7
Run Code Online (Sandbox Code Playgroud)

我想根据某个步骤填充与“a”列相关的缺失列。在本例中,给定步长 0.5,我想用缺失值(即 1.5 和 3.0)填充“a”列,并将其他列设置为空,以获得以下结果。

     a     b    c
0  0.5  10.0  7.0
1  1.0   6.0  6.0
2  1.5   NaN  NaN
3  2.0   1.0  7.0
4  2.5   6.0 -5.0
5  3.0   NaN  NaN
6  3.5   9.0  7.0
Run Code Online (Sandbox Code Playgroud)

使用 pandas 或其他库(如 numpy 或 scipy)执行此操作的最简洁方法是什么?

谢谢!

jez*_*ael 5

创建数组 by numpy.arange,然后创建indexbyset_index并最后reindex使用reset_index

step= .5
idx = np.arange(df['a'].min(), df['a'].max() + step, step)
df = df.set_index('a').reindex(idx).reset_index()
print (df)
     a     b    c
0  0.5  10.0  7.0
1  1.0   6.0  6.0
2  1.5   NaN  NaN
3  2.0   1.0  7.0
4  2.5   6.0 -5.0
5  3.0   NaN  NaN
6  3.5   9.0  7.0
Run Code Online (Sandbox Code Playgroud)


Lui*_*lva 5

实现此目的的一种简单方法是首先创建所需的索引,然后合并其上的其余信息:

import pandas as pd
import numpy as np

df = pd.DataFrame({'a': [0.5, 1, 2, 2.5, 3.5],
                   'b': [10, 6, 1, 6, 9],
                   'c': [7, 6, 7, -5, 7]})
ls = np.arange(df.a.min(), df.a.max(), 0.5)
new_df = pd.DataFrame({'a':ls})
new_df = new_df.merge(df, on='a', how='left')
Run Code Online (Sandbox Code Playgroud)