我有一个pandas dataframe:import pandas as pd import numpy as np
ds1 = {'col1':[1,1,1,1,1,1,1, 2,2,2,2,2,2,2], "col2" : [1,np.NaN,np.NaN,np.NaN,np.NaN,np.NaN,np.NaN, np.NaN,np.NaN,np.NaN,np.NaN,np.NaN,np.NaN,3]}
df1 = pd.DataFrame(data=ds1)
print(df1)
col1 col2
0 1 1.0
1 1 NaN
2 1 NaN
3 1 NaN
4 1 NaN
5 1 NaN
6 1 NaN
7 2 NaN
8 2 NaN
9 2 NaN
10 2 NaN
11 2 NaN
12 2 NaN
13 2 3.0
对于col1
的相同值,我需要用col1
中存在的非缺失值填充col2
的缺失值。
在这种情况下,生成的dataframe看起来像这样:
col1 col2
0 1 1.0
1 1 1.0
2 1 1.0
3 1 1.0
4 1 1.0
5 1 1.0
6 1 1.0
7 2 3.0
8 2 3.0
9 2 3.0
10 2 3.0
11 2 3.0
12 2 3.0
13 2 3.0
有人知道如何在Python中实现吗?
2条答案
按热度按时间fcg9iug31#
有几种方法可以做到这一点。如果每组只有一个非空值,并且希望将其作为所有NaN的填充值,则使用
groupby
和transform
的简单方法可以工作:或者,
groupby
和forwardfill/回填每组。如果您有类似于以下的数据,我建议您使用此选项:1,NaN,NaN,2,NaN,NaN,3,NaN,NaN。因为这些填充仅基于最后一个非空值回填缺失值。
如果有前导NaN,则尾随
bfill
调用很有用。lkaoscv72#
创建将col1值Map到col2值的字典:
然后对于col2缺失的所有行:使用map_col1_to_col2字典Mapcol1,并将其分配为col2。