为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

一只甜甜圈 2022-03-05 15:13:02
我想知道有没有更快的方法来解决这个问题而不使用 for 循环?输入数据框如下所示:    0    1    2    3    4    5    6   0   x    x    1   NaN  NaN  NaN  NaN1   x    y    1   NaN  NaN  NaN  NaN2   y    y    4    4    4    4    43   y    z    5    2    7    4    0  4   x    x   NaN   5    7    4    95   x    y   NaN   9    4    5    10我希望输出如下所示:    0    1    2    3    4    5    6   0   x    x    1    5    7    4    91   x    y    1    9    4    5    102   y    y    4    4    4    4    43   y    z    5    2    7    4    0  col0&col1是一些信息。如果我们将它们作为一个信息,这两列将没有 NaN 并且是唯一的。这个数据框可能非常大,我不知道数据丢失在哪里。
查看完整描述

1 回答

?
白板的微信

TA贡献1883条经验 获得超3个赞

NaN如果需要每组的第一个非值,请使用GroupBy.first:


df1 = df.groupby([0,1], as_index=False).first()

print (df1)

   0  1    2    3    4    5     6

0  x  x  1.0  5.0  7.0  4.0   9.0

1  x  y  1.0  9.0  4.0  5.0  10.0

2  y  y  4.0  4.0  4.0  4.0   4.0

3  y  z  5.0  2.0  7.0  4.0   0.0

print (df)

   0  1     2     3     4    5     6

0  x  x  10.0   NaN   NaN  NaN   NaN

1  x  x  20.0   NaN   NaN  NaN   NaN

2  x  x   1.0   NaN   NaN  NaN   NaN

3  x  y   1.0   NaN   NaN  NaN   NaN

4  y  y   4.0   4.0   4.0  4.0   4.0

5  y  z   5.0   2.0   7.0  4.0   0.0

6  x  x   NaN   5.0   7.0  4.0   9.0

7  x  x   NaN  50.0  70.0  4.0   9.0

8  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     6

0  x  x  10.0  5.0  7.0  4.0   9.0

1  x  y   1.0  9.0  4.0  5.0  10.0

2  y  y   4.0  4.0  4.0  4.0   4.0

3  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     6

0  x  x  10.0   5.0   7.0  4.0   9.0

1  x  x  20.0  50.0  70.0  4.0   9.0

2  x  x   1.0   NaN   NaN  NaN   NaN

3  x  y   1.0   9.0   4.0  5.0  10.0

4  y  y   4.0   4.0   4.0  4.0   4.0

5  y  z   5.0   2.0   7.0  4.0   0.0


查看完整回答
反对 回复 2022-03-05
  • 1 回答
  • 0 关注
  • 164 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号