Найдите предыдущие ненулевые пары для каждой комбинации столбцов и пар и создайте отдельный столбец для тех, кто использует python - PullRequest
0 голосов
/ 30 ноября 2018

У меня есть такой фрейм данных:

A     B
1     1
0     0
2     3
0     0
0     0
5     4
0     3
0     0

Я хочу добавить еще два столбца со следующими условиями: для каждой пары A и B предыдущие ненулевые значения пары будут добавлены в другие два столбца.но в первый раз это будут нули в обоих,

Например, вывод будет выглядеть так:способ.

Ответы [ 2 ]

0 голосов
/ 30 ноября 2018

Я считаю, что один из способов - просто сдвинуть A и B, использовать его в качестве столбца C и D, заменить строки, где оба равны 0, на nan, выполнить прямую заливку и, наконец, заменитьtop NaN с 0:

df[['C','D']] = df[['A','B']].shift()

df.loc[(df[['C','D']] == 0).all(1), ['C','D']] = np.nan

df.ffill().fillna(0).astype(int)

   A  B  C  D
0  1  1  0  0
1  0  0  1  1
2  2  3  1  1
3  0  0  2  3
4  0  0  2  3
5  5  4  2  3
6  0  3  5  4
7  0  0  0  3
0 голосов
/ 30 ноября 2018

Я ломаю шаги

mask=df.A.ne(0)|df.B.ne(0) # get the target row 
df1=df[mask] # filter from original df
df1.index+=1 # get the index increase by one 
df1.columns=['C','D'] # reassign the columns 
pd.concat([df,df1],axis=1).ffill().fillna(0).astype(int) # using ffill
Out[569]: 
   A  B  C  D
0  1  1  0  0
1  0  0  1  1
2  2  3  1  1
3  0  0  2  3
4  0  0  2  3
5  5  4  2  3
6  0  3  5  4
7  0  0  0  3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...