Как добавить фиктивную строку на основе одного столбца в кадре данных панд? - PullRequest
0 голосов
/ 15 сентября 2018

Я работаю с пандами, так что в основном у меня есть два кадра данных, и количество строк в обоих случаях различается:

DF

        wave  num  stlines     fwhm       EWs  MeasredWave  
0    4050.32    3  0.28269  0.07365  22.16080  4050.311360   
1    4208.98    5  0.48122  0.08765  44.90035  4208.972962   
2    4374.94    9  0.71483  0.11429  86.96497  4374.927110   
3    4379.74    9  0.31404  0.09107  30.44271  4379.760601   
4    4398.01   14  0.50415  0.09845  52.83236  4398.007473 
5    5520.50    1  0.06148  0.12556   8.21685  5520.484742   

df1

        wave  num  stlines     fwhm       EWs  MeasredWave  
0    4050.32    3  0.28616  0.07521  22.91064  4050.327388   
1    4208.98    6  0.48781  0.08573  44.51609  4208.990029   
2    4374.94    9  0.71548  0.11437  87.10152  4374.944513   
3    4379.74   10  0.31338  0.09098  30.34791  4379.778009   
4    4398.01   15  0.49950  0.08612  45.78707  4398.020367   
5    4502.21    9  0.56362  0.10114  60.67868  4502.223123   
6    4508.28    3  0.69554  0.11600  85.88428  4508.291777   
7    4512.99    2  0.20486  0.08891  19.38745  4512.999332
8    5520.50    1  0.06148  0.12556   8.21685  5520.484742

Итак, в df1 есть несколько строк, которых нет в df. Поэтому я хочу добавить строку в фрейм данных и соответственно сбросить индекс. Раньше я просто удалял лишние строки из фрейма данных, чтобы они оставались равными, но сейчас я просто хочу добавить пустую строку индекса столбца.

Желаемый результат должен выглядеть так:

        wave  num  stlines     fwhm       EWs  MeasredWave  
0    4050.32    3  0.28269  0.07365  22.16080  4050.311360   
1    4208.98    5  0.48122  0.08765  44.90035  4208.972962   
2    4374.94    9  0.71483  0.11429  86.96497  4374.927110   
3    4379.74    9  0.31404  0.09107  30.44271  4379.760601   
4    4398.01   14  0.50415  0.09845  52.83236  4398.007473 
5    4502.21    0       0      0         0         0   
6    4508.28    0       0      0         0         0   
7    4512.99    0       0      0         0         0
8    5520.50    1  0.06148  0.12556   8.21685  5520.484742  

Как я могу получить это?

1 Ответ

0 голосов
/ 15 сентября 2018

IIUC, вы можете использовать DataFrame.loc для обновления значений df1, где wave не существует в df:

df1.loc[~df1.wave.isin(df.wave), 'num':] = 0

Затем используйте DataFrame.combine_first, чтобы убедиться, что значенияв df имеют приоритет:

df_out = df.set_index('wave').combine_first(df1.set_index('wave')).reset_index()

[out]

print(df_out)
      wave   num  stlines     fwhm       EWs  MeasredWave
0  4050.32   3.0  0.28269  0.07365  22.16080  4050.311360
1  4208.98   5.0  0.48122  0.08765  44.90035  4208.972962
2  4374.94   9.0  0.71483  0.11429  86.96497  4374.927110
3  4379.74   9.0  0.31404  0.09107  30.44271  4379.760601
4  4398.01  14.0  0.50415  0.09845  52.83236  4398.007473
5  4502.21   0.0  0.00000  0.00000   0.00000     0.000000
6  4508.28   0.0  0.00000  0.00000   0.00000     0.000000
7  4512.99   0.0  0.00000  0.00000   0.00000     0.000000
8  5520.50   1.0  0.06148  0.12556   8.21685  5520.484742
...