Запоминание - это преобразование функций в структуры данных. Обычно требуется, чтобы преобразование происходило постепенно и лениво (по запросу данного элемента домена - или «ключ»). В ленивых функциональных языках это ленивое преобразование может происходить автоматически, и, таким образом, мемонирование может быть реализовано без (явных) побочных эффектов.
Используйте numpy.repeat
, чтобы добавить строки, и Series.duplicated
, чтобы установить цену.
df2 = pd.DataFrame(df.values.repeat(df.status.eq(0)+1, axis=0), columns=df.columns)
df2.loc[df2.name.duplicated(), 'price'] *= -1
df2
name age status price
0 frank 12 1 100
1 jack 33 0 190
2 jack 33 0 -190
3 joe 22 1 200
Если вам нужно также замаскировать NaN в столбце возраста, вы можете сделать это с помощью Series.mask
.
df2.age.mask(df2.name.duplicated())
0 12
1 33
2 NaN
3 22
Name: age, dtype: object
<час> Полный код.
df2 = pd.DataFrame(df.values.repeat(df.status.eq(0)+1, axis=0), columns=df.columns)
isdup = df2.name.duplicated()
df2.loc[isdup, 'price'] *= -1
df2['age'] = df2['age'].mask(isdup)
df2
name age status price
0 frank 12 1 100
1 jack 33 0 190
2 jack NaN 0 -190
3 joe 22 1 200