создать новый столбец pandas, который представляет собой таблицу строк выше - PullRequest
2 голосов
/ 15 марта 2020

У меня есть:

pd.DataFrame({'col1':['A','A','B','F']})

    col1
0   A
1   A
2   B
3   F

Я хочу:

pd.DataFrame({'col1':['A','A','B','F'],'col2':['1A:0B:0C:0D:0E:0F','2A:0B:0C:0D:0E:0F','2A:1B:0C:0D:0E:0F','2A:1B:0C:0D:0E:1F']})

    col1    col2
0   A   1A:0B:0C:0D:0E:0F
1   A   2A:0B:0C:0D:0E:0F
2   B   2A:1B:0C:0D:0E:0F
3   F   2A:1B:0C:0D:0E:1F

Требования:

У меня есть столбец, который может принимать одно из 6 значений (A: F ). Я хочу создать новый столбец, в котором будет отображаться итоговая сумма значений этой строки и выше.

какие-либо предложения?

1 Ответ

4 голосов
/ 15 марта 2020

Вы можете использовать get_dummies + cumsum. С этим выходом, как правило, легче работать, но если вам нужен этот вывод одной строки, вы можете объединить столбцы с счетчиками. .reindex и .fillna гарантируют, что все упорядочено и включает в себя именно те категории, которые вы хотите.

import pandas as pd
df = pd.DataFrame({'col1':['A','A','B','F']})

df = (pd.get_dummies(df['col1'])
        .reindex(list('ABCDEF'), axis=1)
        .fillna(0, downcast='infer')
        .cumsum())
#   A  B  C  D  E  F
#0  1  0  0  0  0  0
#1  2  0  0  0  0  0
#2  2  1  0  0  0  0
#3  2  1  0  0  0  1

df['res'] = [':'.join(x) for x in (df.astype(str)+df.columns).to_numpy()]
#   A  B  C  D  E  F                res
#0  1  0  0  0  0  0  1A:0B:0C:0D:0E:0F
#1  2  0  0  0  0  0  2A:0B:0C:0D:0E:0F
#2  2  1  0  0  0  0  2A:1B:0C:0D:0E:0F
#3  2  1  0  0  0  1  2A:1B:0C:0D:0E:1F
...