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