如何根据行条件保留指定列?

问题描述 投票:0回答:1

有人知道如何在Pandas中获得下一个遵循的结构吗?

我有一个看起来像这样的Pandas数据框

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
  1. [如果[VAR2](例如T)中的第一个“字母”在[VAR1](例如TT)中加倍->从VAR3(.01)中取值。
  2. [如果[VAR2](例如TC)中的字母组合与[VAR1](例如TC)中的字母相同->从VAR4(.48)中取值。
  3. [如果[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

希望有人能给我提示!

谢谢,

啤酒

python-3.x pandas if-statement pythonanywhere
1个回答
0
投票

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

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
© www.soinside.com 2019 - 2024. All rights reserved.