我有一个名为 All_samp 的数据框,如果同一行中的其他条目与不同行中的条目匹配,我想将列中的条目更改为最低值。例如,我有这个数据框
如果染色体、起始点和样本匹配相同,那么我希望 no_calls 成为匹配行的最小值。因此,这就是我正在寻找的结果:
我尝试通过使用 itertuples 和嵌套循环创建一系列 no_calls 列来更改条目。这样,我应该能够用修改后的系列替换 no_calls 列。这就是我的代码的样子
no_calls = []
for row1 in All_samp.itertuples():
for row2 in All_samp.itertuples():
if row1[0] != row2[0] and (row1[1] == row2[1] and row1[2] == row2[2] and row1[3] == row2[3]):
print(row1[0], row2[0], row1[4], row2[4], min(row1[4], row2[4]))
no_calls.append(min(row1[4], row2[4]))
break
else:
no_calls.append(row1[4])
break
结果只是给了我一个原始 no_calls 条目的列表,我想这是因为我的“if”语句仅经历第一次迭代,而不是循环遍历所有行。一旦我让循环工作,我将用列表替换该列
All_samp['no_calls'] = no_calls
如果有任何想法如何帮助我修复循环,甚至是一种完全不同的方法来获取数据框中的最小 no_calls 值(我确信有比循环更好的东西,我将不胜感激。
此外,如果有一种方法可以让我在 StackOverflow 上以表格以外的方式呈现数据帧,以便更轻松地直接使用它们,请告诉我。
最佳答案
Groupby
和 transform('min')
df['NO_CALLS']=df.groupby(['CHROMOSOME','START','SAMPLE'])['NO_CALLS'].transform('min')
关于python - 如果行中的其他条目匹配,则更改 Python Pandas 数据框中的条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65206943/