'Clean way to rearrange columns that are repeated and have nans in them

I have the following dataframe:

Subject  Val1  Val1  Int  Val1  Val1  Int2  Val1
A        1     2     3    NaN   NaN   Sp    NaN
B        NaN   NaN   NaN  2     3     NaN   NaN
C        NaN   NaN   4    NaN   NaN   0     3 
D        NaN   NaN   3    NaN   NaN   8     NaN

I want to ended up with only 2 column that are val1 because it has at most 2 non-nans for a given subject. Namely, the output would look like this:

Subject  Val1  Val1 Int Int2
A        1     2    3   Sp
B        2     3    NaN NaN
C        3     NaN  4   0
D        NaN   NaN  3   8

is there a function in pandas to do this in a clean way? Clean meaning only a few lines of code. Because one way would be to iterate through row with a for loop and bring all nonnan values to the left, but I'd like something cleaner and more efficient as well.



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source