Я буду использовать изначально пустой df1 с некоторыми дополнительными строками для этого примера:
df2 = pd.DataFrame({'#timestamp':[-5,-4,-3,-2,-1,0],
'grid_U1': [413.714,413.797,413.926,414.037,414.066,414.064],
'grid_U2': [415.796,415.909,416.117,416.093,416.163,416.183],
'grid_U3': [416.757,416.853,417.09,417.158,417.175,417.085]})
df1 = pd.DataFrame(index=range(0,10), columns=['col2_0','col3_0','col4_0'])
Если вы хотите сопоставить индексы строк (скопировать с заданного номера строки в df2 на тот же номер строки в df1), то вы можете использовать это:
In [403]: df1[['col2_0','col3_0','col4_0']] = df2[df2['#timestamp'].isin(range(-5,1))][['grid_U1','grid_U2','grid_U3']]
In [404]: df1
Out[404]:
col2_0 col3_0 col4_0
0 413.714 415.796 416.757
1 413.797 415.909 416.853
2 413.926 416.117 417.090
3 414.037 416.093 417.158
4 414.066 416.163 417.175
5 414.064 416.183 417.085
6 NaN NaN NaN
7 NaN NaN NaN
8 NaN NaN NaN
9 NaN NaN NaN
Я подтверждаю, что это совпадает с номерами строк, выбрав значения меток времени, которые не встречаются вверху:
In [405]: df1[['col2_0','col3_0','col4_0']] = df2[df2['#timestamp'].isin([-3,-1])][['grid_U1','grid_U2','grid_U3']]
In [406]: df1
Out[406]:
col2_0 col3_0 col4_0
0 NaN NaN NaN
1 NaN NaN NaN
2 413.926 416.117 417.090
3 NaN NaN NaN
4 414.066 416.163 417.175
5 NaN NaN NaN
6 NaN NaN NaN
7 NaN NaN NaN
8 NaN NaN NaN
9 NaN NaN NaN
Если вы хотите вместо этого заполнить сверху df1, вы можете добавить вызов reset_index в конце (вам нужно drop = True, чтобы избежать добавления дополнительного столбца индекса в):
In [412]: df1[['col2_0','col3_0','col4_0']] = df2[df2['#timestamp'].isin([-3,-1])][['grid_U1','grid_U2','grid_U3']].reset_index(drop=True)
In [413]: df1
Out[413]:
col2_0 col3_0 col4_0
0 413.926 416.117 417.090
1 414.066 416.163 417.175
2 NaN NaN NaN
3 NaN NaN NaN
4 NaN NaN NaN
5 NaN NaN NaN
6 NaN NaN NaN
7 NaN NaN NaN
8 NaN NaN NaN
9 NaN NaN NaN