У меня есть два фрейма данных с одинаковыми именами столбцов.
wave num stlines fwhm EWs MeasredWave
0 4050.32 3.0 0.282690 0.073650 22.160800 4050.311360
1 4208.98 5.5 0.490580 0.084925 44.323130 4208.973512
2 4374.94 9.0 0.714830 0.114290 86.964970 4374.927110
3 4379.74 9.0 0.314040 0.091070 30.442710 4379.760601
4 4398.01 14.0 0.504150 0.098450 52.832360 4398.007473
5 4502.21 8.0 0.562780 0.101090 60.559960 4502.205220
wave num stlines fwhm EWs MeasredWave
0 4050.32 3.0 0.276350 0.077770 22.876240 4050.310469
1 4208.98 5.5 0.493035 0.084065 44.095755 4208.974363
2 4374.94 6.0 0.716760 0.111550 85.111070 4374.927649
3 4379.74 1.0 0.299070 0.098400 31.325300 4379.759339
4 4398.01 6.0 0.508810 0.084530 45.783740 4398.004164
5 4502.21 9.0 0.572320 0.100540 61.252070 4502.205764
Поскольку оба фрейма данных имеют имена столбцов, а первый столбец wave
одинаков в обоих фреймах данных. Я хочу взять разницу во всем столбце, кроме столбца 1, то есть wave
.
Итак, результирующий фрейм данных должен иметь column1 и разницу между всеми другими столбцами
Как я могу это сделать?
В обоих df есть одинаковые имена столбцов и одинаковое количество строк?
да, имена столбцов и строки точно такие же.!
Так нужно вычесть все значения столбцов без предварительного?
Да, точно.! @jezrael
Еще один вопрос? Как я могу принять среднее и стандартное отклонение нескольких фреймов данных с неравным количеством строк в пандах? аналогичным образом сохраняя исключение столбца 'wave' ?? @jezrael
@GyanenderGandhar - Не такой простой ответ, но я надеюсь, что это поможет.
да, это сработало. Большое спасибо, чувак. @jezrael
Я считаю, что нужно извлечь имена столбцов с помощью difference
, а затем использовать DataFrame.sub
:
cols = df1.columns.difference(['wave'])
#is possible specify multiple columns
#cols = df1.columns.difference(['wave','MeasredWave'])
#df1[cols] = means in output are not touch columns from df1
df1[cols] = df1[cols].sub(df2[cols])
print (df1)
wave num stlines fwhm EWs MeasredWave
0 4050.32 0.0 0.006340 -0.00412 -0.715440 0.000891
1 4208.98 0.0 -0.002455 0.00086 0.227375 -0.000851
2 4374.94 3.0 -0.001930 0.00274 1.853900 -0.000539
3 4379.74 8.0 0.014970 -0.00733 -0.882590 0.001262
4 4398.01 8.0 -0.004660 0.01392 7.048620 0.003309
5 4502.21 -1.0 -0.009540 0.00055 -0.692110 -0.000544
cols = df1.columns.difference(['wave'])
#df2[cols] = means in output are not touch columns from df2
df2[cols] = df1[cols].sub(df2[cols])
print (df2)
wave num stlines fwhm EWs MeasredWave
0 4050.32 0.0 0.006340 -0.00412 -0.715440 0.000891
1 4208.98 0.0 -0.002455 0.00086 0.227375 -0.000851
2 4374.94 3.0 -0.001930 0.00274 1.853900 -0.000539
3 4379.74 8.0 0.014970 -0.00733 -0.882590 0.001262
4 4398.01 8.0 -0.004660 0.01392 7.048620 0.003309
5 4502.21 -1.0 -0.009540 0.00055 -0.692110 -0.000544
Если вы хотите получить быстрый и хороший ответ, упростите жизнь другим пользователям. Очистите свой код, сделайте его как можно короче, не добавляйте ссылки на вашу локальную папку с вашими файлами и т. д. Дополнительно задайте одну проблему в вопросе