猿问

如何根据以前的列填充 NaN 值

我有一个没有缺失数据 (A) 但具有重复值的初始列。如何用缺失的数据填充下一列 (B) 以便填充并且左侧的列在右侧始终具有相同的值?我还希望任何其他列保持不变 (C)


例如,这就是我所拥有的


    A    B     C

1   1    20    4

2   2    NaN   8

3   3    NaN   2

4   2    30    9

5   3    40    1

6   1    NaN   3

这就是我想要的


    A    B     C

1   1    20    4

2   2    30*   8

3   3    40*   2

4   2    30    9

5   3    40    1

6   1    20*   3

填充值上的星号。


这需要使用非常大的数据框进行扩展。


此外,如果我在左列有一个值,在单独的观察中右侧有多个值,我将如何填充平均值?


千巷猫影
浏览 49回答 2
2回答

慕桂英4014372

您可以使用groupbyon'A'和 usefirst来查找第一个对应的值'B'(它不会选择NaN)。import pandas as pddf = pd.DataFrame({'A':[1,2,3,2,3,1],                    'B':[20, None, None, 30, 40, None],                    'C': [4,8,2,9,1,3]})# find first 'B' value for each 'A'lookup = df[['A', 'B']].groupby('A').first()['B']# only use rows where 'B' is NaNnan_mask = df['B'].isnull()# replace NaN values in 'B' with lookup valuesdf['B'].loc[nan_mask] = df.loc[nan_mask].apply(lambda x: lookup[x['A']], axis=1)print(df)哪个输出:   A     B  C0  1  20.0  41  2  30.0  82  3  40.0  23  2  30.0  94  3  40.0  15  1  20.0  3如果有很多NaN值,'B'您可能希望在使用之前排除它们groupby。import pandas as pddf = pd.DataFrame({'A':[1,2,3,2,3,1],                    'B':[20, None, None, 30, 40, None],                    'C': [4,8,2,9,1,3]})# Only use rows where 'B' is NaNnan_mask = df['B'].isnull()# Find first 'B' value for each 'A'lookup = df[~nan_mask][['A', 'B']].groupby('A').first()['B']df['B'].loc[nan_mask] = df.loc[nan_mask].apply(lambda x: lookup[x['A']], axis=1)print(df)

大话西游666

您可以先执行 sort_values,然后根据 A 列向前填充 B 列。实现这一点的方法是:import pandas as pdimport numpy as npx = {'A':[1,2,3,2,3,1],     'B':[20,np.nan,np.nan,30,40,np.nan],     'C':[4,8,2,9,1,3]}df = pd.DataFrame(x)#sort_values first, then forward fill based on column B#this will get the right values for you while maintaing#the original order of the dataframedf['B'] = df.sort_values(by=['A','B'])['B'].ffill()print (df)输出将是:原始数据:   A     B  C0  1  20.0  41  2   NaN  82  3   NaN  23  2  30.0  94  3  40.0  15  1   NaN  3更新数据:   A     B  C0  1  20.0  41  2  30.0  82  3  40.0  23  2  30.0  94  3  40.0  15  1  20.0  3
随时随地看视频慕课网APP

相关分类

Python
我要回答