Как сохранить указанный столбец в зависимости от условий строки? - PullRequest
0 голосов
/ 29 октября 2019

Кто-нибудь знает, как получить следующую структуру в Пандах?

У меня есть кадр данных 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) -> takeзначение из 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

Надеюсь, кто-то может дать мне подсказку!

Спасибо,

Ale.

1 Ответ

0 голосов
/ 29 октября 2019

Если я правильно понял вашу проблему, я сначала напишу функцию, которая оценит ваши условия и вернет желаемое значение:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...