Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将列中的值移到中间行上_Python_Python 3.x_Pandas_Dataframe - Fatal编程技术网

Python 将列中的值移到中间行上

Python 将列中的值移到中间行上,python,python-3.x,pandas,dataframe,Python,Python 3.x,Pandas,Dataframe,我有一个熊猫数据框,如下所示。其中一列具有中间NaN单元格的值。这些值将向前移动一个,以便用最后一个丢失的值替换后面的下一个值。中间的NaN细胞必须保留。我试着使用.shift(),但因为我不知道中间有多少行,这意味着每次移位都要计算一次。有更好的方法吗 IIUC,您可以只按非na值进行分组,然后移动它们 df['y'] = df.y.groupby(pd.isnull(df.y)).shift() 另一种方式: s = df['y'].notnull() df.loc[s,'y'] = d

我有一个熊猫数据框,如下所示。其中一列具有中间NaN单元格的值。这些值将向前移动一个,以便用最后一个丢失的值替换后面的下一个值。中间的NaN细胞必须保留。我试着使用.shift(),但因为我不知道中间有多少行,这意味着每次移位都要计算一次。有更好的方法吗


IIUC,您可以只按非na值进行分组,然后移动它们

df['y'] = df.y.groupby(pd.isnull(df.y)).shift()

另一种方式:

s = df['y'].notnull()
df.loc[s,'y'] = df.loc[s,'y'].shift()
如果粘贴文本数据而不是图片,则测试会更容易

输入:

df = pd.DataFrame({'x':list('AAABBBBCCCC'),
                  'y':[5,np.nan,np.nan,10, np.nan,np.nan,np.nan,
                       20, np.nan,np.nan,np.nan]})
输出:

df = pd.DataFrame({'x':list('AAABBBBCCCC'),
                  'y':[5,np.nan,np.nan,10, np.nan,np.nan,np.nan,
                       20, np.nan,np.nan,np.nan]})
    x     y
0   A   NaN
1   A   NaN
2   A   NaN
3   B   5.0
4   B   NaN
5   B   NaN
6   B   NaN
7   C  10.0
8   C   NaN
9   C   NaN
10  C   NaN