Группа задает c строк в pandas на основе амплитуды определенной записи столбца - PullRequest
0 голосов
/ 05 февраля 2020

Итак, вот моя проблема, у меня есть такой тип данных (он намного больше, я просто показываю несколько строк, и мне плевать на индекс):

Датафрейм

Существует много взаимодействий (Донор / Акцептор), которым назначены энергии и угол. Мне удалось вычислить амплитуды каждого из взаимодействий, что дает мне следующий список:

> Donor/Acceptor

>5. LP ( 1) F  7     20. BD*( 1) B  1- N......            0.33
>6. LP ( 2) F  7     20. BD*( 1) B  1- N......            0.36
>6. LP ( 2) F  7     21. BD*( 1) B  1- F......            0.02
>6. LP ( 2) F  7     22. BD*( 1) N  4- H......            0.96
>6. LP ( 2) F  7     23. BD*( 1) N  4- H......            1.08
>7. LP ( 3) F  7     22. BD*( 1) N  4- H......            1.36
>7. LP ( 3) F  7     23. BD*( 1) N  4- H......            1.18
>8. LP ( 1) F  8     20. BD*( 1) B  1- N......           0.06
>9. LP ( 2) F  8     18. BD*( 1) B  1- H......            1.27
>9. LP ( 2) F  8     19. BD*( 1) B  1- H......            1.35
>10. LP ( 3) F  8     18. BD*( 1) B  1- H......            0.77
>10. LP ( 3) F  8     19. BD*( 1) B  1- H......            0.31
>10. LP ( 3) F  8     20. BD*( 1) B  1- N......            6.96
>10. LP ( 3) F  8     23. BD*( 1) N  4- H......            0.07
>10. LP ( 3) F  8     24. BD*( 1) N  4- F......            2.11
>11. BD ( 1) B  1- H  2     22. BD*( 1) N  4- H......      1.32
>11. BD ( 1) B  1- H  2     23. BD*( 1) N  4- H......      0.00
>11. BD ( 1) B  1- H  2     24. BD*( 1) N  4- F......      7.10
>12. BD ( 1) B  1- H  3     23. BD*( 1) N  4- H......      1.30
>12. BD ( 1) B  1- H  3     24. BD*( 1) N  4- F......      1.36
>13. BD ( 1) B  1- N  4     18. BD*( 1) B  1- H......      0.46
>13. BD ( 1) B  1- N  4     19. BD*( 1) B  1- H......      0.48
>13. BD ( 1) B  1- N  4     21. BD*( 1) B  1- F......      0.71
>13. BD ( 1) B  1- N  4     22. BD*( 1) N  4- H......      0.10
>13. BD ( 1) B  1- N  4     23. BD*( 1) N  4- H......      0.04
>14. BD ( 1) B  1- F  8     24. BD*( 1) N  4- F......      0.88
>15. BD ( 1) N  4- H  5     21. BD*( 1) B  1- F......      1.70
>15. BD ( 1) N  4- H  5     24. BD*( 1) N  4- F......      0.16
>16. BD ( 1) N  4- H  6     21. BD*( 1) B  1- F......      0.33
>16. BD ( 1) N  4- H  6     24. BD*( 1) N  4- F......      0.13
>17. BD ( 1) N  4- F  7     22. BD*( 1) N  4- H......      0.12
>17. BD ( 1) N  4- F  7     23. BD*( 1) N  4- H......      0.09

Итак, слева находится запись Донор / Акцептор, а справа - значение амплитуда, которая составляет (максимальное значение минус минимальное значение) для каждого взаимодействия (в диапазоне от 0 до 180)

Что мне нужно сделать, это следующее: Для каждой амплитуды меньше, чем 1,00, я хотел изменить имя донора / Запись акцептора для «Другие», а затем для каждого из них добавить все значения (добавить все для 0 градусов, затем все для 10 градусов и т. Д. c ...), поэтому у меня будет 19 строк «Другие» '(От 0 до 180 градусов)

Может кто-нибудь помочь? (отчаянно)

Здесь я прилагаю .csv, который я использовал для этого, если кто-то готов проверить что-то, чтобы помочь.

https://drive.google.com/file/d/13ZQB8eVvEYIs-g7WCH8SvCoqwHhPcFJI/view?usp=sharing

Вот код, который я использовал для форматирования фрейма данных и код для вычисления амплитуды.

## Import pandas and format dataframe

    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt
    import os
    df0 = pd.read_csv('HIPER_Bonds_fullFBH2NH2F_NBODel.csv')
    df0['Donor/Acceptor'] = df0.Donor.str.cat(df0.Acceptor)
    df0 = df0.filter(['Molecule','Donor/Acceptor' ,'E (kcal/mal)', 'Degrees'])
    df0 = df0.sort_values(by=['Molecule','Donor/Acceptor','Degrees'])



## Amplitude Calculation

    df_groupby_inter = df0.groupby(by=['Donor/Acceptor'])
    df_max = df_groupby_inter.max()['E (kcal/mal)']
    df_min = df_groupby_inter.min()['E (kcal/mal)']
    df_amp = df_max - df_min
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...