Pandas Groupby и создать новый столбец с пользовательскими значениями - PullRequest
0 голосов
/ 04 декабря 2018

Народ,

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

Вариант использования.

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

  Maturity,Periods  
  0.5,2   
  0.5,2   
  1.0,3  
  1.0,3   
  1.0,3  

Как видите, столбец maturity повторяется на основе числа в столбце periods.Теперь я хочу создать новый столбец, который будет иметь все 0, кроме 1 значения для каждого сгруппированного срока погашения.Таким образом, ожидаемый фрейм данных выглядит примерно так:

  Maturity,Periods,CP   
  0.5,2,0  
  0.5,2,1   
  1.0,3,0    
  1.0,3,0   
  1.0,3,1  

Как видно из ожидаемого фрейма данных, число 0s в столбце CP на 1 меньше значения в столбце Periods иоставшееся значение равно 1.

Я попробовал описанную ниже групповую операцию панд, но она не удалась.

new_df['CP'] = new_df.groupby(['Maturity'])['Periods'].apply(lambda x: np.zeros((x-1, 1)) + np.array([1.0])).reset_index()

Может кто-нибудь указать, где я ошибаюсь?

ОБНОВЛЕННОЕ РЕДАКТИРОВАНИЕ:

В качестве продолжения вышеуказанного вопроса, как будет решаться описанный ниже подход с использованием операций Pandas?

Используя этот приведенный выше кадр данных, я хочу создатьновый столбец, но ожидаемый результат выглядит примерно так:

Maturity,Periods,CP,TimeCF  
0.5,2,0,0.5
0.5,2,1,0.5

1.0,3,0,0.5
1.0,3,0,1.0
1.0,3,1,1.0

1.5,4,0,0.5
1.5,4,0,1.0
1.5,4,0,1.5
1.5,4,1,1.5

Новый столбец TimeCF будет содержать значения времени потоков денежных средств (с учетом полугодовых потоков денежных средств по облигации)

1 Ответ

0 голосов
/ 04 декабря 2018

Не похоже, что вам нужно groupby здесь ... попробуйте это:

df['CP'] = 0
df.loc[df['Maturity'].ne(df['Maturity'].shift(-1)), 'CP'] = 1

print(df)
   Maturity  Periods  CP
0       0.5        2   0
1       0.5        2   1
2       1.0        3   0
3       1.0        3   0
4       1.0        3   1

Если groupby неизбежен, вы можете использовать его таким же образом, как и раньше:

df['CP'] = 0
df.loc[df.groupby('Maturity').apply(lambda x: x.index[-1]), 'CP'] = 1

print(df)
   Maturity  Periods  CP
0       0.5        2   0
1       0.5        2   1
2       1.0        3   0
3       1.0        3   0
4       1.0        3   1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...