Try creating a DataFrame from values where the indices and data are the same, concat this new DataFrame with the original, use groupby.head to get only the first row from each id group, then cleanup order with sort_index:
import pandas as pd
df = pd.DataFrame(index=range(10, 100, 10), columns=['a1', 'a2', 'a3'])
values = [11, 20, 23, 30, 32, 35, 60]
# Convert list into a DataFrame with index and value the same
values_df = pd.DataFrame(data=values, index=values, columns=['a2'])
# Create new dataframe from df and values_df
new_df = pd.concat((df, values_df))
# Group By index and only keep first from each group
# (not using first() since it would overwrite the NaNs)
new_df = new_df.groupby(new_df.index).head(1).sort_index()
# For Display
print(new_df)
Source (df):
a1 a2 a3
10 NaN NaN NaN
20 NaN NaN NaN
30 NaN NaN NaN
40 NaN NaN NaN
50 NaN NaN NaN
60 NaN NaN NaN
70 NaN NaN NaN
80 NaN NaN NaN
90 NaN NaN NaN
Output (new_df):
a1 a2 a3
10 NaN NaN NaN
11 NaN 11 NaN
20 NaN NaN NaN
23 NaN 23 NaN
30 NaN NaN NaN
32 NaN 32 NaN
35 NaN 35 NaN
40 NaN NaN NaN
50 NaN NaN NaN
60 NaN NaN NaN
70 NaN NaN NaN
80 NaN NaN NaN
90 NaN NaN NaN