Лучший способ сделать класс Python для нескольких компонентов? Например, Хроматография - PullRequest
0 голосов
/ 03 мая 2020

Я хочу создать класс Python для спецификации c Углеводородная хроматография, где пользователь предоставляет только молярный состав определенных компонентов, для которых у меня уже есть физические свойства, необходимые для некоторых оценок:

                  formula       mw      ppc     tpc
name                                               
methane               CH4  16.0430   666.40 -116.67
ethane               C2H6  30.0700   706.50   89.92
propane              C3H8  44.0970   616.00  206.06
isobutane           C4H10  58.1230   527.90  274.46
n-butane            C4H10  58.1230   550.60  305.62
...                   ...      ...      ...     ...
nitrogen               N2  28.0134   493.10 -232.51
chlorine              CL2  70.9060  1157.00  290.75
water                 H2O  18.0153  3198.80  705.16
helium                 HE   4.0026    32.99 -450.31
hydrogen-chloride     HCL  36.4610  1205.00  127.77

[64 rows x 4 columns]

Я изначально хотел создать класс Component следующим образом:

class component():
    def __init__(self,name, symbol, mw, ppc, tpc):
        self.name = name
        self.symbol = symbol
        self.mw = mw #Molecular Weight
        self.ppc = ppc #Pressure Pseudo-critical
        self.tpc = tpc #Temperature Pseudo-critical

Однако я не знаю, как поступить, чтобы получить класс, который группирует компоненты, определяемые пользователем.

Пользователь может иметь подобный DataFrame.

        name     y
0    methane  0.75
1     ethane  0.10
2    propane  0.08
3  isobutane  0.07

Я бы хотел, чтобы пользователь мог выполнять некоторые вычисления на основе предоставленной композиции и таблицы свойств.

Как лучше всего это сделать?

1 Ответ

0 голосов
/ 03 мая 2020

Я не совсем уверен, правильно ли я понимаю вашу цель.

Если речь идет о слиянии двух фреймов данных, вы можете сделать что-то вроде:

df_one.merge(df_two, on=['name'], how='outer')

Если речь идет об инициации объект, например, только по имени, вы можете передать его в def __init__(self, name):, а затем собрать остальное из существующих фреймов данных (например, some_row = df_one.loc[df_one['name'] == 'methane']).

...