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

bqf10yzr  于 2023-05-05  发布在  其他
关注(0)|答案(1)|浏览(125)

有人知道如何在Pandas中获得下一个后续结构吗?
我有一个Pandas数据框,如下所示

ID  Con  Case   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.如果[VAR 2]中的第一个字母(例如T)在[VAR 1]中加倍(例如TT)-〉从VAR 3(.01)中取值。
1.如果[VAR 2]中的字母组合(例如TC),它与[VAR 1]中的相同(例如TC)-〉从VAR 4(.48)取值。
1.如果[VAR 2]中的第二个字母(例如G)在[VAR 1]中加倍(例如GG)-〉从VAR 5中取值(.70)。
基于此信息,我希望输出 Dataframe 如下所示:

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

希望有人能给予我一点提示!
谢啦
麦酒

siv3szwd

siv3szwd1#

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

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?

然后将其应用到 Dataframe ,指定新列:

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

相关问题