用另一个Python的值填充一列的nan
我有一个数据集,该数据集已合并在一起,以填补彼此之间的缺失值 问题是,我有一些列缺少数据,现在我想用不缺少的值填充这些列 对于输入,合并的数据集如下所示:用另一个Python的值填充一列的nan,python,python-3.x,pandas,dataframe,replace,Python,Python 3.x,Pandas,Dataframe,Replace,我有一个数据集,该数据集已合并在一起,以填补彼此之间的缺失值 问题是,我有一些列缺少数据,现在我想用不缺少的值填充这些列 对于输入,合并的数据集如下所示: Name State ID Number_x Number_y Op_x Op_y Johnson AL 1 1 nan 1956 nan Johnson AL
Name State ID Number_x Number_y Op_x Op_y
Johnson AL 1 1 nan 1956 nan
Johnson AL 1 nan nan 1956 nan
Johnson AL 2 1 nan 1999 nan
Johnson AL 2 0 nan 1999 nan
Debra AK 1A 0 nan 2000 nan
Debra AK 1B nan 20 nan 1997
Debra AK 2 nan 10 nan 2009
Debra AK 3 nan 1 nan 2008
.
.
我想要的输出是:
Name State ID Number_x Number_y Op_x Op_y
Johnson AL 1 1 1 1956 1956
Johnson AL 2 1 1 1999 1999
Johnson AL 2 0 0 1999 1999
Debra AK 1A 0 0 2000 2000
Debra AK 1B 20 20 1997 1997
Debra AK 2 10 10 2009 2009
Debra AK 3 1 1 2008 2008
.
.
因此,我希望所有nan
值都被其列中的关联值替换-将Number\u x
匹配到Number\u y
和Op\u x
匹配到Op\u y
需要注意的一点是,当两个ID相同时,有时它们的值会不同;类似于Johnson
,具有ID=2
,具有不同的数字,但op值相同。我想保留这些,因为我需要对它们进行更多的调查
此外,如果该行有两个
Number\ux
和Number\uy
缺失值,我想将该行取出,就像Johnson
使用Number\ux
和Number\uy
作为nan
值缺失一样。
df.groupby(df.columns.str.split('_').str[0],1).first().dropna(subset=['Number','Op'])
ID Name Number Op State
0 1 Johnson 1.0 1956.0 AL
2 2 Johnson 1.0 1999.0 AL
3 2 Johnson 0.0 1999.0 AL
4 1A Debra 0.0 2000.0 AK
5 1B Debra 20.0 1997.0 AK
6 2 Debra 10.0 2009.0 AK
7 3 Debra 1.0 2008.0 AK
让我们使用axis=1
df.groupby(df.columns.str.split('_').str[0],1).first().dropna(subset=['Number','Op'])
ID Name Number Op State
0 1 Johnson 1.0 1956.0 AL
2 2 Johnson 1.0 1999.0 AL
3 2 Johnson 0.0 1999.0 AL
4 1A Debra 0.0 2000.0 AK
5 1B Debra 20.0 1997.0 AK
6 2 Debra 10.0 2009.0 AK
7 3 Debra 1.0 2008.0 AK
为什么最后第二排的一个是1,另一个是10?对不起-已更正。谢谢。您还有重复的列输入输出,_x和_y是相同的吗?关于df.loc[df.isnull().any(axis=1),:]=df.ffill()
为什么最后第二行是1,另一行是10?抱歉-已更正。谢谢。你还有重复的列输入输出,_x和_y是一样的吗?关于df.loc[df.isnull().any(axis=1),:]=df.ffill()
astype(int)对于['Number','Op']
@pygo原始的df应该是浮动的,这就是为什么我把它保留在这里的原因。这只是部分df。@W-B,很好的解决方案,+1astype(int)表示['Number','Op']
@pygo原始df应该是float,这就是为什么我把它保留在这里。这只是部分df。@W-B,很好的解,+1