Python 3.x 如何根据行条件保留指定列?

Python 3.x 如何根据行条件保留指定列?,python-3.x,pandas,if-statement,pythonanywhere,Python 3.x,Pandas,If Statement,Pythonanywhere,有人知道如何获得大熊猫的下一个跟随结构吗 我有一个熊猫数据框,看起来像这样 ID VAR1 VAR2 VAR3 VAR4 VAR5 1 TT TG .01 .09 .90 2 CC TC .20 .34 .56 3 GG AG .10 .20 .70 4 TC TC .17 .48 .35 5 AG AG .12 .46 .32 6 GG TG .

有人知道如何获得大熊猫的下一个跟随结构吗

我有一个熊猫数据框,看起来像这样

ID  VAR1  VAR2  VAR3  VAR4  VAR5

1    TT    TG    .01  .09   .90
2    CC    TC    .20  .34   .56
3    GG    AG    .10  .20   .70
4    TC    TC    .17  .48   .35
5    AG    AG    .12  .46   .32
6    GG    TG    .15  .20   .65
7    TT    TC    .06  .24   .70
8    TT    CT    .11  .21   .68 
9    GT    GT    .05  .10   .85
  • 如果[VAR2](例如T)中的第一个“字母”在[VAR1](例如TT)中加倍)->从VAR3(.01)中取值
  • 如果[VAR2](例如TC)中的字母组合与[VAR1](例如TC)中的字母组合相同,则从VAR4(.48)中获取值
  • 如果[VAR2](例如g)中的第二个“字母”在[VAR1](例如GG)中加倍)->从VAR5(.70)中取值
  • 基于此信息,我希望我的输出数据框如下所示:

    ID  VAR1  VAR2   VAR6 
    
    1    TT    TG    .01
    2    CC    TC    .56
    3    GG    AG    .70
    4    TC    TC    .48
    5    AG    AG    .46
    6    GG    TG    .65
    7    TT    TC    .06
    8    TT    CT    .68
    9    GT    GT    .10
    
    希望有人能给我一个提示

    谢谢


    Ale。

    如果我正确理解了您的问题,我会首先编写一个函数,用于评估您的条件并返回所需的值:

    def classify(item):
        if item["VAR1"] == item["VAR2"][0]*2:
            return item["VAR3"]
        if item["VAR1"] == item["VAR2"]:
            return item["VAR4"]
        if item["VAR1"] == item["VAR2"][1]*2:
            return item["VAR5"]
        return 0  # what if none is true?
    
    然后将其应用于数据帧,并指定新列:

    df["VAR6"] = df.apply(classify, axis=1)
    
    # You can also drop the middle columns if needed
    df.drop(["VAR3", "VAR4", "VAR5"], axis=1, inplace=True)
    
    输出:

       VAR1 VAR2  VAR6
    ID                
    1    TT   TG  0.01
    2    CC   TC  0.56
    3    GG   AG  0.70
    4    TC   TC  0.48
    5    AG   AG  0.46
    6    GG   TG  0.65
    7    TT   TC  0.06
    8    TT   CT  0.68
    9    GT   GT  0.10
    

    到目前为止你试着做什么?有很多方法可以操纵熊猫中的列和条件,你研究过吗?你好,我已经尝试过np。到目前为止,我所做的是df['var7']=np。其中((df['VAR1']='AA')&((df['VAR2']='AG')|(df['VAR2']='AC')),df['VAR3'],0)每个组合(20),因为顺序很重要,有没有可能比这容易得多?非常感谢,它工作得非常好,因为我用np.where做了每个组合。