Let’s take the following sample DataFrame, containing 2 groups
of 3 adjacent rows:
C1 C2 C3 C4 C5 C6
ABC NaN NaN NaN NaN PK KJ
PQR NaN NaN RR SS NaN NaN
MNO PO UI NaN NaN NaN NaN
XXX AA NaN NaN NaN EE NaN
XX1 NaN BB NaN DD NaN FF1
XX2 NaN NaN CC NaN NaN FF2
Then proceed as follows:
-
Define a function “cumulating” the content from a group
of rows:def getFirstValue(grp): return grp.reset_index().bfill(axis=0).iloc[0]
-
Then apply it:
df2 = df.groupby(np.arange(len(df.index)) // 3).apply(getFirstValue)
-
And a couple of “finishing” operations:
df2.set_index('index', inplace=True) df2.index.name = None df2.columns.name = None
The result is:
C1 C2 C3 C4 C5 C6
ABC PO UI RR SS PK KJ
XXX AA BB CC DD EE FF1
solved Is there any pandas function to merge 3 rows?