Это должно сделать это:
import pandas as pd
d = {'patient1': [1,2,3,4,5], 'patient2': [3,5,7,8,11], 'patient3': [5,9,13,17,21]}
df = pd.DataFrame(data=d)
min_df = df.apply(min,axis=0)
max_df = df.apply(max,axis=0)
sub_df = max_df - min_df
div_df = sub_df/0.5
out_df = pd.concat([min_df, max_df,sub_df,div_df], axis=1)
out_df.index.name = 'Patient'
out_df.columns = ['min','max','div','sub']
out_df.to_csv("out_all.csv")
out_df.T.to_csv("out_all_patients_as_columns.csv")
Надеюсь, вы получите эту идею, адаптируйте ее соответствующим образом.
Вам нужно предложение having
там вместе с предложением where:
ids = [1,3]
Book
.select('books.*') # not sure if this is necessary
.where(authors_books: { author_id: ids })
.joins(:authors_books)
.group('books.id')
.having('count(authors_books) >= ?', ids.size)