Как объединить строки df используя python? - PullRequest
2 голосов
/ 21 марта 2020

Я пытаюсь объединить строки фрейма данных, который содержит строки. Я хочу проверить, содержит ли строка NaN и, если это так, удалить NaN из этой строки и объединить остальные с той, что выше этой строки. Наконец, удалите строку, содержащую NaN.

Вот мои примеры данных:

df=[["d","t","u","y","e"],["d",np.nan,np.nan,np.nan,"o"],["y","p","p","w","r"]]
df=pd.DataFrame(df)
print(df)
0    1    2    3  4
d   t    u    y   e
d  NaN  NaN  NaN  o
y    p    p    w  r

Я хочу, чтобы вывод выглядел так, как показано ниже.

   0    1    2    3   4
   dd   t    u    y  eo   
   y    p    p    w   r

Здесь Это мое испытание, но не повезло.

for i in range(len(df)):
for j in range(len(df.iloc[1,])):
    if(pd.isnull(df.iloc[i,j])==True):
        df.concat(df.iloc[i,j],df.iloc[i-1,j])
        df.dropna(df.iloc[:,i])

Я новичок в Python, может кто-нибудь помочь мне с этим.

1 Ответ

2 голосов
/ 21 марта 2020

Идея заключается в создании помощника Series для группировки.

Итак, сначала создайте маску для всех строк, по крайней мере, с одним NaN с DataFrame.isna с DataFrame.any, создайте Series с помощью конструктора, замените несоответствующие значения на NaN s на Series.where и замените пропущенные значения для тех же групп выше на limit=1 для замены только одной строки выше .

Последние заменяют все пропущенные значения на пустые значения, группируя и агрегируя join:

m = df.isna().any(axis=1)
s = pd.Series(np.arange(len(m)), index=df.index)
g = s.where(m).bfill(limit=1).fillna(s)

df = df.fillna('').groupby(g).agg(''.join).reset_index(drop=True)
print (df)
    0  1  2  3   4
0  dd  t  u  y  eo
1   y  p  p  w   r
...