pandas 在python中合并包含Nan值的连续行[已关闭]

3b6akqbq  于 2023-04-18  发布在  Python
关注(0)|答案(2)|浏览(106)

已关闭,该问题需要details or clarity,目前不接受回答。
**想要改进此问题?**通过editing this post添加详细信息并澄清问题。

3天前关闭。
Improve this question

输入

0    1       2       3     4
    0 vina  dfaf   5654    gfh   Nan 
    1 qwe   Nan    Nan     Nan   Nan 
    2 bina  Nan    Nan     Nan   Nan 
    3 asd   Nan    108     Nan   Nan 
    4 nina  Nan    Nan     064   Nan 
    5 jkl   Nan    Nan     Nan   Nan 
    6 tina  Nan    192     Nan   Nan 
    7 QWE   Nan    Nan     Nan   Nan

输出

0                 1      2    3    4   
    0  vina qwe bina     dfaf   5654  gfh  Nan 
    1  asd               Nan    108   Nan  Nan 
    2  nina jkl          Nan    Nan   064  Nan 
    3  tina QWE          Nan    192   Nan  Nan
yhxst69z

yhxst69z1#

您可以使用自定义groupby.agg

# ensure real NaNs
# df = df.replace('Nan', float('nan'))

# identify the rows with at least one non-NaN
m = df.iloc[:, 1:].notna().any(axis=1)

out = (df.groupby(m.cumsum())
         .agg(lambda g: ' '.join(g.dropna()))
         .replace('', float('nan'))
      )

输出:

0     1     2    3   4
1  vina qwe bina  dfaf  5654  gfh NaN
2            asd   NaN   108  NaN NaN
3       nina jkl   NaN   NaN  064 NaN
4       tina QWE   NaN   192  NaN NaN
jgwigjjp

jgwigjjp2#

在否定条件下用cumsum标识块,然后用agg标识groupby:

(df.groupby(df.iloc[:, 1:].ne('Nan').any(axis=1).cumsum())
   .agg({'0':' '.join, '1':'first', '2':'first', '3':'first'})
)

输出:

0     1     2    3
1  vina qwe bina  dfaf  5654  gfh
2            asd   Nan   108  Nan
3       nina jkl   Nan   Nan  064
4       tina QWE   Nan   192  Nan

相关问题