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 Pandas groupby:填充其他组成员缺少的值_Python_Pandas_Dataframe_Nan_Pandas Groupby - Fatal编程技术网

Python Pandas groupby:填充其他组成员缺少的值

Python Pandas groupby:填充其他组成员缺少的值,python,pandas,dataframe,nan,pandas-groupby,Python,Pandas,Dataframe,Nan,Pandas Groupby,我认为最好用一个例子来说明这一点。我要做的是从一个组中找到非空的数字,并将其传播到组的其余部分 In [52]: df = pd.DataFrame.from_dict({1:{'i_id': 2, 'i_num':1}, 2: {'i_id': 2, 'i_num': np.nan}, 3: {'i_id': 2, 'i_num': np.nan}, 4: {'i_id': 3, 'i_num': np.nan}, 5: {'i_id': 3, 'i_num': 5}}, orient='in

我认为最好用一个例子来说明这一点。我要做的是从一个组中找到非空的数字,并将其传播到组的其余部分

In [52]: df = pd.DataFrame.from_dict({1:{'i_id': 2, 'i_num':1}, 2: {'i_id': 2, 'i_num': np.nan}, 3: {'i_id': 2, 'i_num': np.nan}, 4: {'i_id': 3, 'i_num': np.nan}, 5: {'i_id': 3, 'i_num': 5}}, orient='index')

In [53]: df
Out[53]:
   i_num  i_id
1      1     2
2    NaN     2
3    NaN     2
4    NaN     3
5      5     3
数据帧看起来像这样。我想要的是取所有的I_id==2,并使它们的I_num==1,所有的I_id==3,并使它们的I_num==5(因此两者都匹配它们的非空组邻居)

因此,最终结果将是:

   i_num  i_id
1      1     2
2      1     2
3      1     2
4      5     3
5      5     3

first
查找组中的第一个非空值。您可以这样填写每个组中的其他值:

df['i_num'] = df.groupby('i_id')['i_num'].transform('first')
这将根据需要生成列:

   i_num  i_id
1      1     2
2      1     2
3      1     2
4      5     3
5      5     3
请记住,这将用第一个值替换组中的所有值,而不仅仅是
NaN
值(这似乎是您在这里要查找的)

或者,为了尊重组中的任何其他非空值,您可以按以下方式使用
fillna

# make a column of first values for each group
x = df['i_id'].map(df.groupby('i_id')['i_num'].first())
# fill only NaN values using new column x
df['i_num'] = df['i_num'].fillna(x)

如果给定的
i_id
有多个唯一的
i_num
,该怎么办?如何选择要填充的值?