猿问

用相同数据框中的值填充 NaN 信息

我想知道有没有更快的方法来解决这个问题而不使用 for 循环?


输入数据框如下所示:


    0    1    2    3    4    5    6   

0   x    x    1   NaN  NaN  NaN  NaN

1   x    y    1   NaN  NaN  NaN  NaN

2   y    y    4    4    4    4    4

3   y    z    5    2    7    4    0  

4   x    x   NaN   5    7    4    9

5   x    y   NaN   9    4    5    10

我希望输出如下所示:


    0    1    2    3    4    5    6   

0   x    x    1    5    7    4    9

1   x    y    1    9    4    5    10

2   y    y    4    4    4    4    4

3   y    z    5    2    7    4    0  

col0&col1是一些信息。如果我们将它们作为一个信息,这两列将没有 NaN 并且是唯一的。


这个数据框可能非常大,我不知道数据丢失在哪里。


一只甜甜圈
浏览 165回答 1
1回答

白板的微信

NaN如果需要每组的第一个非值,请使用GroupBy.first:df1 = df.groupby([0,1], as_index=False).first()print (df1)   0  1    2    3    4    5     60  x  x  1.0  5.0  7.0  4.0   9.01  x  y  1.0  9.0  4.0  5.0  10.02  y  y  4.0  4.0  4.0  4.0   4.03  y  z  5.0  2.0  7.0  4.0   0.0print (df)   0  1     2     3     4    5     60  x  x  10.0   NaN   NaN  NaN   NaN1  x  x  20.0   NaN   NaN  NaN   NaN2  x  x   1.0   NaN   NaN  NaN   NaN3  x  y   1.0   NaN   NaN  NaN   NaN4  y  y   4.0   4.0   4.0  4.0   4.05  y  z   5.0   2.0   7.0  4.0   0.06  x  x   NaN   5.0   7.0  4.0   9.07  x  x   NaN  50.0  70.0  4.0   9.08  x  y   NaN   9.0   4.0  5.0  10.0如果每个组可能有更多没有 NaN 的行,则会丢失一些数据:df1 = df.groupby([0,1], as_index=False).first()print (df1)   0  1     2    3    4    5     60  x  x  10.0  5.0  7.0  4.0   9.01  x  y   1.0  9.0  4.0  5.0  10.02  y  y   4.0  4.0  4.0  4.0   4.03  y  z   5.0  2.0  7.0  4.0   0.0具有自定义功能的可能解决方案:def f(x):    df1 = pd.DataFrame({y: pd.Series(x[y].dropna().values) for y in x})    return (df1)df = df.set_index([0,1]).groupby([0,1]).apply(f).reset_index(level=2, drop=True).reset_index()print (df)   0  1     2     3     4    5     60  x  x  10.0   5.0   7.0  4.0   9.01  x  x  20.0  50.0  70.0  4.0   9.02  x  x   1.0   NaN   NaN  NaN   NaN3  x  y   1.0   9.0   4.0  5.0  10.04  y  y   4.0   4.0   4.0  4.0   4.05  y  z   5.0   2.0   7.0  4.0   0.0
随时随地看视频慕课网APP

相关分类

Python
我要回答