0

I would like to add one row into the dataframe and I want to sort the dataframe after insertion.

I have added the row and reset the dataframe index but in vain.

How can I fix this problem? Thank you for advice in advance.

import pandas as pd

def diff(first, second):
        second = set(second)
        return [item for item in first if item not in second]

df = pd.DataFrame({"Date":[
                          '2015/12/25',
                          '2015/12/26',
                          '2015/12/27',
                          '2015/12/28',
                          '2015/12/29',
                          '2015/12/30',
                          '2015/12/31'
                        ],
                    "X":["X","A","A","X","","","X"]
                }) 

df2 = pd.DataFrame({"Date":[
                          '2015/12/25',
                          '2015/12/28',
                          '2015/12/29',
                          '2015/12/30',
                          '2015/12/31'
                        ],
                    "X":["X","A","A","X",""]
                }) 

diff_df = pd.merge(df, df2, how='outer', indicator='Exist')

diff_df = diff_df.loc[diff_df['Exist'] != 'both']

prevDay = int(diff_df['Date'].values[0].rsplit('/', 1)[-1]) - 1
prevDate = diff_df['Date'].values[0].rsplit('/', 1)[-2] + "/" + str(prevDay)

df3 = pd.DataFrame({"Date":[diff_df['Date'].values[0]], "X":["Q"]}) 

df2 = df2.sort_index(axis=1, ascending=True)

df2 = df2.append(df3)

df2 = df2.reset_index(drop=True)

print(df2)

Actual Output:

0  2015/12/25  X
1  2015/12/28  A
2  2015/12/29  A
3  2015/12/30  X
4  2015/12/31   
5  2015/12/26  Q

Expected Output:

0  2015/12/25  X
1  2015/12/26  Q
2  2015/12/28  A
3  2015/12/29  A
4  2015/12/30  X
5  2015/12/31   
wing
  • 43
  • 1
  • 1
  • 5

1 Answers1

0

I think what want is pandas's searchsorted which return position to inserted into.

Sort values for every insertion sound bad. But if you only need to sort once after all inserts then it's fine.

hunzter
  • 554
  • 4
  • 11