Создание новых значений в панде с использованием математики с существующими столбцами - PullRequest
1 голос
/ 15 марта 2020

У меня есть df с числами во втором столбце. Каждое число представляет длину последовательности ДНК. Я хотел бы создать два новых столбца, в которых первый говорит, где начинается эта последовательность, а второй - где заканчивается эта последовательность.

Это мой текущий df:

    Names  LEN
0     Ribosomal_S9:  121
1     Ribosomal_S8:  129
2    Ribosomal_L10:  100
3             GrpE:  166
4           DUF150:  141
..              ...  ...
115      TIGR03632:  117
116      TIGR03654:  175
117      TIGR03723:  314
118      TIGR03725:  212
119      TIGR03953:  188

[120 rows x 2 columns]

И это то, что я пытаюсь получить

              Names  LEN    Start   End
0     Ribosomal_S9:  121     0      121
1     Ribosomal_S8:  129    121     250
2    Ribosomal_L10:  100    250     350 
3             GrpE:  166    350     516
4           DUF150:  141    516     657 
..              ...  ...   ...  ..
115      TIGR03632:  117          
116      TIGR03654:  175          
117      TIGR03723:  314          
118      TIGR03725:  212          
119      TIGR03953:  188          

[120 rows x 4 columns]

Может кто-нибудь направить меня в правильном направлении?

1 Ответ

1 голос
/ 15 марта 2020

Использовать DataFrame.assign с новыми столбцами, созданными с помощью Series.cumsum и для запуска добавлено Series.shift:

#convert column to integers
df['LEN'] = df['LEN'].astype(int)
#alternative for replace non numeric to missing values
#df['LEN'] = pd.to_numeric(df['LEN'], errors='coerce')

s = df['LEN'].cumsum()
df = df.assign(Start = s.shift(fill_value=0), End = s)
print (df)
            Names  LEN  Start  End
0   Ribosomal_S9:  121      0  121
1   Ribosomal_S8:  129    121  250
2  Ribosomal_L10:  100    250  350
3           GrpE:  166    350  516
4         DUF150:  141    516  657
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...