【问题标题】:Change entry in Python Pandas dataframe if other entries in rows match如果行中的其他条目匹配,则更改 Python Pandas 数据框中的条目
【发布时间】:2020-12-09 05:14:53
【问题描述】:

我有一个名为 All_samp 的数据框,如果同一行中的其他条目与不同行中的条目匹配,我想将列中的条目更改为最小值。例如,我有这个数据框

index chromosome start sample no_calls
22 chr1 190098060 8.1 600
23 chr1 190098060 9.1 858
24 chr1 190098078 8.1 201
25 chr1 190098093 8.1 250
26 chr1 190098093 8.1 32
27 chr1 190098093 8.1 271
28 chr1 190098119 8.1 288
29 chr1 190098123 10.1 146
30 chr1 190098123 10.1 307
31 chr10 190098123 8.1 366
32 chr1 190098160 8.1 298

如果染色体、起始和样本匹配相同,那么我希望 no_calls 是匹配行的最小值。因此,这就是我要寻找的结果:

index chromosome start sample no_calls
22 chr1 190098060 8.1 600
23 chr1 190098060 9.1 858
24 chr1 190098078 8.1 201
25 chr1 190098093 8.1 32
26 chr1 190098093 8.1 32
27 chr1 190098093 8.1 32
28 chr1 190098119 8.1 288
29 chr1 190098123 10.1 146
30 chr1 190098123 10.1 146
31 chr10 190098123 10.1 366
32 chr1 190098160 8.1 298

我尝试通过使用 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 上以表格形式呈现数据框,以便更容易直接使用它们,请告诉我。

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    Groupbytransform('min')

    df['NO_CALLS']=df.groupby(['CHROMOSOME','START','SAMPLE'])['NO_CALLS'].transform('min')
    

    【讨论】:

    • 非常感谢...是否有某些功能可以进入转换?
    • 我认为的几乎所有函数,max、nunique、sum 等
    猜你喜欢
    • 1970-01-01
    • 2011-04-20
    • 1970-01-01
    • 1970-01-01
    • 2021-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多