user86907:
私は、文字列を含むデータフレームの列を連結しようとしています。私は、行が含まれているかどうかを確認したいNaN
のであれば、削除しNaN
、その行から、その行の上に1と残りの部分を連結します。最終的には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、これで缶誰ヘルプ私に新しいです。
エズレル:
アイデアは、ヘルパーを作成しているSeries
グループ化します。
したがって、最初の少なくとも一つを有するすべての行に対してマスクを作成するNaN
ことにより、S 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