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

How to keep a specif column based on row conditions?

有人知道如何获取 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)中的第一个 'letter' 在 [VAR1](例如 TT)中翻倍 -> 从 VAR3 (.01) 中取值。
  2. 如果 [VAR2] 中的字母组合(例如 TC)与 [VAR1] 中的相同(例如 TC)-> 从 VAR4 (.48) 中取值。
  3. 如果 [VAR2] 中的第二个 'letter'(例如 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

希望有人能给我提示!

谢谢,

麦酒。

如果我正确理解了你的问题,我会首先编写一个函数来评估你的条件和 return 所需的值:

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