Как увеличить столбец на основе значения в предыдущей строке при использовании groupby в кадре данных Pandas? - PullRequest
2 голосов
/ 17 марта 2019

У меня есть следующий фрейм данных:

claim   diagnosis   sequence
100     1           1.0
100     2           1.0
100     3           NaN
100     4           NaN
105     1           1.0
105     2           2.0
105     3           2.0
105     4           NaN
111     1           1.0
111     2           2.0
111     3           3.0
111     4           NaN

Мне нужно, чтобы все NaN были заменены на одно значение в предыдущей строке заявкой:

claim   diagnosis   sequence
100     1           1.0
100     2           1.0
100     3           2.0
100     4           3.0
105     1           1.0
105     2           2.0
105     3           2.0
105     4           3.0
111     1           1.0
111     2           2.0
111     3           3.0
111     4           4.0

Я пробовал cumcount, но не могу заставить его использовать предыдущее значение.Я также попробовал loc, но тоже не совсем разбираюсь в этом.

things = [{'claim':100, 'diagnosis':1, 'sequence':1},
    {'claim':100, 'diagnosis':2, 'sequence':1 },
    {'claim':100, 'diagnosis':3, },
    {'claim':100, 'diagnosis':4, },
    {'claim':105, 'diagnosis':1, 'sequence':1},
    {'claim':105, 'diagnosis':2, 'sequence':2},
    {'claim':105, 'diagnosis':3,'sequence':2 },
    {'claim':105, 'diagnosis':4, },
    {'claim':111, 'diagnosis':1, 'sequence':1},
    {'claim':111, 'diagnosis':2, 'sequence':2},
    {'claim':111, 'diagnosis':3,  'sequence':3},
    {'claim':111, 'diagnosis':4, }]

df = pd.DataFrame(things)
df

Я ломал голову над этим уже несколько дней, и любая помощь была бы фантастической.

1 Ответ

1 голос
/ 17 марта 2019

Используя cumsum, подсчитайте, сколько NaN до этой строки, затем сложите с ffill

s1=df['sequence'].isnull().groupby(df['claim']).cumsum()
df['sequence']=s1+df.groupby('claim')['sequence'].ffill()
df
Out[145]: 
    claim  diagnosis  sequence
0     100          1       1.0
1     100          2       1.0
2     100          3       2.0
3     100          4       3.0
4     105          1       1.0
5     105          2       2.0
6     105          3       2.0
7     105          4       3.0
8     111          1       1.0
9     111          2       2.0
10    111          3       3.0
11    111          4       4.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...