Мой информационный кадр состоит из последовательностей ДНК, где каждый столбец содержит 3 основания, которые представляют кодоны.Моя цель состоит в том, чтобы обновить любые кодоны, которые содержат определенную строку, в пропуски при заданном условии.Пример условия: если какой-либо из стоп-кодонов в моем списке кодонов появляется в столбце менее определенного%, отредактируйте эти стоп-кодоны в пробелах.
Пример df:
1 2 3 4 5 6 7 8 9 10 11 12
species1 TAG GAC AGG TTA CTA TGG TCA TAA TTC CTG CTG TAA
species2 GTG GAC AGG TTG CGG TGG TCA TGA TTG CTG CTC TAA
species3 TTG GAC AGG TTA CTA TGG TCA TGA TTG CTG CTG TGA
species4 ACC AGC AGG TTC CTG TGC TCA GTT TTG CTG CTG TGA
species5 ATG GAC GGG GTA GTA CGG TCA GTT TTG CTC CTG TAG
species6 ATG GAC GGG ATA GTA CGG TCA GTG TTG CTC CTG TAG
species7 ATG GAC GGG ATA GTA CGG TCA GTT TTG CTC CTG CTG
species8 ATG GAC AGG TTA CGG TGG TCA GTT TTG CTG CTG CTG
species9 TTG GAC AGG TTA CTC TGG TCA GTG TTG CTG CTG CTG
species10 CCC GAC TAA C-C GTG GGT TGA TGG TTG CTG CTG CTG
Мой скриптчтобы сначала отслеживать столбцы с <40% остановками: </p>
codon = ["TAG", "TAA", "TGA"]
df_track = df.loc[:, (df.isin(codon).sum()/len(df) <= frac1) & (df.isin(codon).sum() > 0)]
print(df_track)
1 3 7 8
species1 TAG AGG TCA TAA
species2 GTG AGG TCA TGA
species3 TTG AGG TCA TGA
species4 ACC AGG TCA GTT
species5 ATG GGG TCA GTT
species6 ATG GGG TCA GTG
species7 ATG GGG TCA GTT
species8 ATG AGG TCA GTT
species9 TTG AGG TCA GTG
species10 CCC TAA TGA TGG
Затем, после сохранения этого df_track для записей, мне нужно отредактировать те остановки, которые появляются <40% в исходном df: </p>
for col in df.columns:
if df.loc[:, (df.isin(codon).sum()/len(df) <= 0.4) & (df.isin(codon).sum() > 0)]:
df[df[col] == (cod for cod in codon), col] = "---"
print(df)
Это выдает предупреждение:
ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
То, что я ожидал после РЕДАКТИРОВАНИЯ для остановок:
1 2 3 4 5 6 7 8 9 10 11 12
species1 --- GAC AGG TTA CTA TGG TCA --- TTC CTG CTG TAA
species2 GTG GAC AGG TTG CGG TGG TCA --- TTG CTG CTC TAA
species3 TTG GAC AGG TTA CTA TGG TCA --- TTG CTG CTG TGA
species4 ACC AGC AGG TTC CTG TGC TCA GTT TTG CTG CTG TGA
species5 ATG GAC GGG GTA GTA CGG TCA GTT TTG CTC CTG TAG
species6 ATG GAC GGG ATA GTA CGG TCA GTG TTG CTC CTG TAG
species7 ATG GAC GGG ATA GTA CGG TCA GTT TTG CTC CTG CTG
species8 ATG GAC AGG TTA CGG TGG TCA GTT TTG CTG CTG CTG
species9 TTG GAC AGG TTA CTC TGG TCA GTG TTG CTG CTG CTG
species10 CCC GAC --- C-C GTG GGT --- TGG TTG CTG CTG CTG
Обратите внимание, столбец 12 не будет редактироваться или появляться в df_tracks, потому чтов общем, остановки появляются в более чем 40% видов в этом наборе данных, и поэтому для этих случаев у меня был бы отдельный трекер df (в основном, если остановки превышают предел%, весь столбец отслеживается, а затем удаляется).