Organism under investigation is Plasmodium falciparum. How to calculate the allele frequency for each row?
I tried with this code:
import pandas as pd
# Read CSV file
# df = pd.read_csv("Pf_M76611.pf7.200_samples - Copy.csv")
df= pd.read_csv("/content/Pf_M76611.pf7.200_samples - Copy.csv")
# Define function to calculate allele frequencies
def calc_allele_freq(row):
# Get total number of samples
num_samples = len(row) - 9
# Get reference allele
ref_allele = row['REF']
# Get alternative alleles
alt_alleles = row['ALT'].split(',')
# Initialize list to store allele frequencies
allele_freqs = []
# Loop over alternative alleles
for alt_allele in alt_alleles:
# Initialize count for this allele
count = 0
# Loop over samples
for i in range(9, len(row)):
# Get genotype for this sample
gt = row[i].split(':')[0]
# Count this allele if it is present in the genotype
if alt_allele in gt:
count += 1
# Calculate frequency for this allele
freq = count / num_samples
# Add frequency to list
allele_freqs.append(freq)
# Add frequency for reference allele
allele_freqs.insert(0, 1 - sum(allele_freqs))
# Return allele list and frequency list as a tuple
allele_list = [ref_allele] + alt_alleles
freq_list = [round(freq, 1) for freq in allele_freqs]
return (allele_list, freq_list)
# Apply function to each row of the dataframe
allele_freq_df = df.apply(calc_allele_freq, axis=1, result_type='expand')
# Add columns to dataframe
df['Allele List'] = allele_freq_df[0]
df['Proportion List'] = allele_freq_df[1]
# Select columns for output and drop duplicates
# output_df = df[['#CHROM', 'POS', 'Allele List', 'Proportion List']].drop_duplicates()
# # Convert output dataframe to string and print
# print(output_df.to_string(index=False))