pandas使用.loc条件,通过连接字符串组合行

nbnkbykc  于 2022-10-23  发布在  其他
关注(0)|答案(1)|浏览(210)

我有一个 Dataframe ,其中一些数据溢出到下一行,例如,使用2-(乙酰氧基)-1-苯基乙酮,“无”进入下一行

x = pd.DataFrame([
    ['90', '2-(Acetyloxy)-1-phenyletha-', 'i H2O; vs EtOH,'], 
    [np.nan, 'ne', 'eth, chl; sl bz,'], 
    [np.nan, np.nan, 'lig']], 
    columns=['number', 'name', 'solubility'])

    number    name                          solubility
0   90        2-(Acetyloxy)-1-phenyletha-   i H2O; vs EtOH,
1   NaN       none                          eth, chl; sl bz,
2   NaN       NaN                           lig

我想形成一个函数,搜索溶解度列是否为空,然后将该行与上面的行合并。运行下面的.loc将生成第1行和第2行,“number”为null,“solution”为非null

In
    df.loc[df['number'].isnull() & df['solubility'].notnull()]

Out 
    number    name                          solubility
1   NaN       none                          eth, chl; sl bz,
2   NaN       NaN                           lig

如何连接第1行字符串和第0行字符串,同时跳过NaN?我认为groupby,但没有列包含唯一值。

fv2wmkja

fv2wmkja1#

IIUC公司


# use number to group together the rows

df['number'].ffill(inplace=True)

# make the null value as empty

df.fillna('', inplace=True)

# groupby on number and combine the name and solubility as a single row

df.groupby(['number'], as_index=False)[['name','solubility']].agg({'name': ''.join, 'solubility': ''.join } )
number  name    solubility
0   90  2-(Acetyloxy)-1-phenyletha-ne   i H2O; vs EtOH,eth, chl; sl bz,lig

PS:对于第1行, Dataframe 定义为“ne”,而文本数据显示为“none”,我使用了您的df定义,结果与此一致

相关问题