Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.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 根据上一个可用值和下一个可用值填充NaN_Python_Pandas - Fatal编程技术网

Python 根据上一个可用值和下一个可用值填充NaN

Python 根据上一个可用值和下一个可用值填充NaN,python,pandas,Python,Pandas,我有如下csv数据: A B 0 x aa 1 z aa 2 3 4 x aa 5 z bb 6 x bb 7 8 z cc 如果在A列中,我想用A列中的值填充B列中的空单元格 last_available_value_before_the_NaNs_in_A.split()[-1] == next_available_value_after_the_NaNs_in_A.split(

我有如下csv数据:

     A     B
0   x aa   
1   z aa   
2          
3   
4   x aa   
5   z bb
6   x bb
7          
8   z cc   
如果在A列中,我想用A列中的值填充B列中的空单元格

last_available_value_before_the_NaNs_in_A.split()[-1] == next_available_value_after_the_NaNs_in_A.split()[-1]
希望的结果是:

     A     B
0   x aa   aa 
1   z aa   aa
2          aa
3          aa
4   x aa   aa
5   z bb   bb
6   x bb   bb
7          
8   z cc   cc

data.loc(7,'B')
将为NaN,因为
data.loc(6,'A').split()[-1]=
data.loc(8,'A').split()[-1]
为false

data.loc(5,'B')
是'bb',因为
data.loc(5,'A').split()[-1]='bb'


谢谢你的帮助

为了说明这个想法,这是冗长的

# create a column that jsut holds the last value
df["lastval"] = df.A.str.split().str[-1]
# fill blanks in a feed-forward manner
df["ffill"] = df.lastval.fillna(method="ffill") 
# fill blanks in a feed-backward manner
df["bfill"] = df.lastval.fillna(method="bfill") 

# create a mask that handles your logic
m = df.lastval.isnull() & (df["ffill"] == df["bfill"])   
# fill those values into B from lastval
df["B"] = df["lastval"]
df.loc[m,"B"] = df.loc[m, "ffill"]

您可以比较使用
ffill
的版本和使用
bfill
的版本:

f = df.A.fillna(method='ffill').str.split().str[-1]
b = df.A.fillna(method='bfill').str.split().str[-1]
df.B.where(f != b, f, inplace=True)

为什么
data.loc[5,'B']
会被填充<代码>数据.loc[4,'A'].split()[-1]!=data.loc[5,'A'].split()[-1]。另外,您能否更准确地指出,
last\u available\u value
next\u available\u value
实际表示的是什么?您好,来宾,因为[5,'A']中的数据是给定的。您好,我指的是NAN之前的最后一个可用值(以及NAN之后的下一个可用值),您的比我的要紧凑得多。喜欢吗