如何根据行条件保留特定列?
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
- 如果 [VAR2](例如 T)中的第一个 'letter' 在 [VAR1](例如 TT)中翻倍 -> 从 VAR3 (.01) 中取值。
- 如果 [VAR2] 中的字母组合(例如 TC)与 [VAR1] 中的相同(例如 TC)-> 从 VAR4 (.48) 中取值。
- 如果 [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
有人知道如何获取 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
- 如果 [VAR2](例如 T)中的第一个 'letter' 在 [VAR1](例如 TT)中翻倍 -> 从 VAR3 (.01) 中取值。
- 如果 [VAR2] 中的字母组合(例如 TC)与 [VAR1] 中的相同(例如 TC)-> 从 VAR4 (.48) 中取值。
- 如果 [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