Итак, вот моя проблема, у меня есть такой тип данных (он намного больше, я просто показываю несколько строк, и мне плевать на индекс):
Датафрейм
Существует много взаимодействий (Донор / Акцептор), которым назначены энергии и угол. Мне удалось вычислить амплитуды каждого из взаимодействий, что дает мне следующий список:
> 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