Найти максимальные значения периода полураспада относительно их значения температуры в том же массиве - PullRequest
0 голосов
/ 03 февраля 2020

Обычно я загружаю файл excel в pandas файл данных здесь:

dv = pd.read_excel('data.xlsx')

Затем я очищаю его и переименовываю в «cleaned», что не важно для этого воспроизводимого примера, просто упомянув для ясность:

if (selected_x.title()=="Viscosity" or selected_y.title()=="Viscosity"):
    cleaned = cleaned[cleaned.Study != "Yanqing Wang 2017"]
    cleaned = cleaned[cleaned.Study != "Thakore 2020"]

Оттуда я разделяю очищенный массив данных на отдельные исследования, этот проект представляет собой литературную композицию. Ниже я приведу два примера:

yan = cleaned[cleaned.Study == "Yanqing Wang 2017"]
tha = cleaned[cleaned.Study == "Thakore 2020"]

Наконец, я загружаю каждое из отдельных исследований в следы и отображаю их на графике. Выбранные y и выбранные x являются строками, такими как «Температура (C)» и «Halflife (Min)»:

trace1 = go.Scatter(y=tha[selected_y], x=tha[selected_x])
trace2 = go.Scatter(y=yan[selected_y], x=yan[selected_x])

Что мне нужно сделать, это после разделения массива на отдельные исследования, найти максимальный период полураспада относительно каждой температуры (0,50,100,150,200,250,300) и собрать их в отдельные списки, затем найти максимальное значение этих списков, взять всю строку и добавить их в один и тот же список. Я пытался сделать это, используя такие вещи, как:

yan50 = yanq[yanq['Temperature (C) '] == 50]
yan100 = yanq[yanq['Temperature (C) '] == 100]
yan150 = yanq[yanq['Temperature (C) '] == 150]
yan200 = yanq[yanq['Temperature (C) '] == 200]
yan250 = yanq[yanq['Temperature (C) '] == 250]
yan300 = yanq[yanq['Temperature (C) '] == 300]

Чтобы разделить исследование на списки различной степени. В настоящее время я застрял, где я должен найти максимальное значение в столбце Halflife каждого списка и добавить всю соответствующую строку в новый список. Это то, что я пытаюсь:

yan = pd.DataFrame(columns=["Study","Gas","Surfactant","Surfactant Concentration","Additive","Additive Concentration","LiquidPhase","Quality","Pressure (Psi)","Temperature (C) ","Shear Rate (/Sec)","Halflife (Min)","Viscosity","Color"])

if (len(yan50) > 0):
    yan50.loc[yan50['Halflife (Min)'].idxmax()]
    yan50 = yan50.dropna()
    yan.append(yan50)

if (len(yan100) > 0):
    yan100.loc[yan100['Halflife (Min)'].idxmax()]
    yan100 = yan100.dropna()
    yan.append(yan100)

if (len(yan150) > 0):
    yan150.loc[yan150['Halflife (Min)'].idxmax()]
    yan150 = yan150.dropna()
    yan.append(yan150)

if (len(yan200) > 0):
    yan200.loc[yan200['Halflife (Min)'].idxmax()]
    yan200 = yan200.dropna()
    yan.append(yan200)

if (len(yan250) > 0):
    yan250.loc[yan250['Halflife (Min)'].idxmax()]
    yan250 = yan250.dropna()
    yan.append(yan250)

if (len(yan300) > 0):
    yan300.loc[yan300['Halflife (Min)'].idxmax()]
    yan300 = yan300.dropna()
    yan.append(yan300)yan50.iloc[yan50['Halflife (Min)'].idxmax()]

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

Я также получил несколько значений Nan для составленных мной отдельных списков температур. , и я не уверен, правильно ли я делю список. Я не слишком силен с Pandas. Требуются рекомендации!

Ссылка на CSV данных

------------ Редактировать ----------- -

enter image description here

Что у меня есть, все исследования размещены в одних и тех же временных точках (50, 100 и т. Д. c). Я хочу найти максимальное значение периода полураспада, чтобы показала только самая верхняя точка. Я делаю это для того, чтобы помочь в визуализации данных. Планы на будущее, выходящие за рамки этой топи c, включают в себя: соединение точек максимального значения с линией и сравнение трендов значений полураспада отдельных исследований.

1 Ответ

1 голос
/ 03 февраля 2020

IIU C, вам нужно

df2 = df.groupby(['Study','Temperature (C) '])['Halflife (Min)'].max().reset_index(name='Max_halflife')

Это приведет к

          Study     Temperature (C)     Max_halflife
0   Thakore 2020                 50     120.00
1   Thakore 2020                100     2.40
2   Thakore 2020                150     0.20
3   Yanqing Wang 2017            50     123.00
4   Yanqing Wang 2017           100     3.20
5   Yanqing Wang 2017           150     0.31

Тогда приведенный ниже код должен получить вам график, который вы хотите.

import seaborn as sns
df2 = df.groupby(['Study','Temperature (C) '])['Halflife (Min)'].max().reset_index(name='Max_halflife')

fig = plt.figure(figsize=(8, 5))
sns.scatterplot(x='Temperature (C) ', y='Max_halflife', data=df2, hue='Study')

Plot

...