Is it possible to move each row to end of same row after removing NaN of each row
Question:
I’ve been looking for the way to remove NaN in each row of dfA(DataFrame) and after then, move every row under push1_start_date and reconnect with the end of push1_start_date. Is it possible to do that ?? I tried stack() and unstack() method but it doesn’t work .Thank you.
push1_start_date push2_start_date push3_start_date push4_start_date push5_start_date push6_start_date push7_start_date push8_start_date
2021-04-29 3 NaN NaN NaN NaN NaN NaN NaN
2021-04-30 20 NaN NaN NaN NaN NaN NaN NaN
2021-05-01 24 NaN NaN NaN NaN NaN NaN NaN
2021-05-02 21 NaN NaN NaN NaN NaN NaN NaN
2021-05-03 14 NaN NaN NaN NaN NaN NaN NaN
2021-05-04 5 NaN NaN NaN NaN NaN NaN NaN
2021-05-05 14 NaN NaN NaN NaN NaN NaN NaN
2021-05-06 16 NaN NaN NaN NaN NaN NaN NaN
2021-05-07 17 NaN NaN NaN NaN NaN NaN NaN
2021-05-08 14 NaN NaN NaN NaN NaN NaN NaN
2021-05-11 78 NaN NaN NaN NaN NaN NaN NaN
2021-05-12 20 78.0 NaN NaN NaN NaN NaN NaN
2021-05-13 13 21.0 NaN NaN NaN NaN NaN NaN
2021-05-14 8 12.0 NaN NaN NaN NaN NaN NaN
2021-05-15 18 8.0 NaN NaN NaN NaN NaN NaN
2021-05-16 16 19.0 NaN NaN NaN NaN NaN NaN
2021-05-17 16 16.0 NaN NaN NaN NaN NaN NaN
2021-05-18 18 15.0 NaN NaN NaN NaN NaN NaN
2021-05-19 14 19.0 NaN NaN 1.0 2.0 NaN NaN
2021-05-20 13 14.0 1.0 NaN 1.0 1.0 NaN NaN
2021-05-21 11 13.0 NaN NaN 1.0 NaN 1.0 NaN
2021-05-22 26 10.0 NaN 2.0 NaN 1.0 NaN NaN
2021-05-23 12 27.0 NaN 1.0 NaN NaN NaN NaN
2021-05-24 15 12.0 1.0 3.0 NaN 1.0 NaN NaN
2021-05-25 9 16.0 NaN 1.0 NaN 1.0 NaN NaN
2021-05-26 14 9.0 NaN 1.0 NaN NaN NaN NaN
2021-05-27 14 12.0 NaN NaN NaN NaN NaN NaN
2021-05-28 21 16.0 NaN NaN NaN NaN NaN NaN
2021-05-29 23 20.0 1.0 2.0 1.0 1.0 NaN NaN
2021-05-30 18 23.0 1.0 NaN 1.0 1.0 NaN NaN
2021-05-31 19 17.0 NaN 3.0 1.0 3.0 NaN NaN
2021-06-01 15 21.0 NaN 3.0 1.0 1.0 NaN NaN
2021-06-02 22 13.0 1.0 2.0 NaN 1.0 NaN NaN
2021-06-03 19 23.0 1.0 NaN NaN 1.0 NaN NaN
2021-06-04 12 20.0 2.0 NaN 2.0 NaN NaN NaN
2021-06-05 2 1.0 NaN NaN NaN 1.0 NaN NaN
ideal output
push1_start_date
2021-04-29 3 ←The begging of push1_start_date
2021-06-05 2 ←The last of push1_start_date
2021-05-12 78 ←The begging of push2_start_date
2021-06-05 1.0 ←The last of push2_start_date
2021-05-20 1.0 ←The begging of push2_start_date
2021-06-04 2.0 ←The last of push2_start_date
it comtines untill push8_start_date
Answers:
You can try with reset_index()
, melt()
,dropna()
and drop()
:
out=(df.reset_index()
.melt('index',value_name='push_start_date')
.dropna(subset=['push_start_date'])
.drop('variable',1))
OR
via concat()
and to_frame()
:
out=(pd.concat([df[x].dropna() for x in df.columns[df.dtypes!='object']])
.to_frame('push_start_date'))
You could use df.melt()
to stack all the columns on the right into 1 column, then keep only the value
column without null values:
df.melt().drop('variable', axis=1).dropna()
Output
value
2021-04-29 3
... ...
2021-06-05 2
2021-05-12 78
... ...
2021-06-05 1.0
2021-05-20 1.0
... ...
2021-06-04 2.0
... ...
I’ve been looking for the way to remove NaN in each row of dfA(DataFrame) and after then, move every row under push1_start_date and reconnect with the end of push1_start_date. Is it possible to do that ?? I tried stack() and unstack() method but it doesn’t work .Thank you.
push1_start_date push2_start_date push3_start_date push4_start_date push5_start_date push6_start_date push7_start_date push8_start_date
2021-04-29 3 NaN NaN NaN NaN NaN NaN NaN
2021-04-30 20 NaN NaN NaN NaN NaN NaN NaN
2021-05-01 24 NaN NaN NaN NaN NaN NaN NaN
2021-05-02 21 NaN NaN NaN NaN NaN NaN NaN
2021-05-03 14 NaN NaN NaN NaN NaN NaN NaN
2021-05-04 5 NaN NaN NaN NaN NaN NaN NaN
2021-05-05 14 NaN NaN NaN NaN NaN NaN NaN
2021-05-06 16 NaN NaN NaN NaN NaN NaN NaN
2021-05-07 17 NaN NaN NaN NaN NaN NaN NaN
2021-05-08 14 NaN NaN NaN NaN NaN NaN NaN
2021-05-11 78 NaN NaN NaN NaN NaN NaN NaN
2021-05-12 20 78.0 NaN NaN NaN NaN NaN NaN
2021-05-13 13 21.0 NaN NaN NaN NaN NaN NaN
2021-05-14 8 12.0 NaN NaN NaN NaN NaN NaN
2021-05-15 18 8.0 NaN NaN NaN NaN NaN NaN
2021-05-16 16 19.0 NaN NaN NaN NaN NaN NaN
2021-05-17 16 16.0 NaN NaN NaN NaN NaN NaN
2021-05-18 18 15.0 NaN NaN NaN NaN NaN NaN
2021-05-19 14 19.0 NaN NaN 1.0 2.0 NaN NaN
2021-05-20 13 14.0 1.0 NaN 1.0 1.0 NaN NaN
2021-05-21 11 13.0 NaN NaN 1.0 NaN 1.0 NaN
2021-05-22 26 10.0 NaN 2.0 NaN 1.0 NaN NaN
2021-05-23 12 27.0 NaN 1.0 NaN NaN NaN NaN
2021-05-24 15 12.0 1.0 3.0 NaN 1.0 NaN NaN
2021-05-25 9 16.0 NaN 1.0 NaN 1.0 NaN NaN
2021-05-26 14 9.0 NaN 1.0 NaN NaN NaN NaN
2021-05-27 14 12.0 NaN NaN NaN NaN NaN NaN
2021-05-28 21 16.0 NaN NaN NaN NaN NaN NaN
2021-05-29 23 20.0 1.0 2.0 1.0 1.0 NaN NaN
2021-05-30 18 23.0 1.0 NaN 1.0 1.0 NaN NaN
2021-05-31 19 17.0 NaN 3.0 1.0 3.0 NaN NaN
2021-06-01 15 21.0 NaN 3.0 1.0 1.0 NaN NaN
2021-06-02 22 13.0 1.0 2.0 NaN 1.0 NaN NaN
2021-06-03 19 23.0 1.0 NaN NaN 1.0 NaN NaN
2021-06-04 12 20.0 2.0 NaN 2.0 NaN NaN NaN
2021-06-05 2 1.0 NaN NaN NaN 1.0 NaN NaN
ideal output
push1_start_date
2021-04-29 3 ←The begging of push1_start_date
2021-06-05 2 ←The last of push1_start_date
2021-05-12 78 ←The begging of push2_start_date
2021-06-05 1.0 ←The last of push2_start_date
2021-05-20 1.0 ←The begging of push2_start_date
2021-06-04 2.0 ←The last of push2_start_date
it comtines untill push8_start_date
You can try with reset_index()
, melt()
,dropna()
and drop()
:
out=(df.reset_index()
.melt('index',value_name='push_start_date')
.dropna(subset=['push_start_date'])
.drop('variable',1))
OR
via concat()
and to_frame()
:
out=(pd.concat([df[x].dropna() for x in df.columns[df.dtypes!='object']])
.to_frame('push_start_date'))
You could use df.melt()
to stack all the columns on the right into 1 column, then keep only the value
column without null values:
df.melt().drop('variable', axis=1).dropna()
Output
value
2021-04-29 3
... ...
2021-06-05 2
2021-05-12 78
... ...
2021-06-05 1.0
2021-05-20 1.0
... ...
2021-06-04 2.0
... ...