亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

用相同數據框中的值填充 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 關注
  • 144 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號