Как преобразовать строки в столбцах в pandas python и выполнить операцию - PullRequest
0 голосов
/ 04 декабря 2018

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

Date    Strike_price        value           
1/1/18      10000           55
1/1/18      10100           40
1/1/18      10200           37
1/1/18      10300           25  
2/1/18      10000           52
2/1/18      10100           38
2/1/18      10200           33
2/1/18      10300           21
3/1/18      10000           58
3/1/18      10100           43
3/1/18      10200           39
3/1/18      10300           26  

Я хочу создать новый фрейм данных из этого:

1/1/18      27 # 27 == 55 - 40 + 37 - 25
2/1/18      26
3/1/18      28

Я пытался использовать df.pivot_table('value', ['Date'], 'Strike_Price'), которыйпреобразует цены исполнения в столбцы, но тогда я не могу удалить или отфильтровать какие-либо конкретные столбцы из DF.

Может ли кто-нибудь помочь мне в этом, пожалуйста?

Ответы [ 2 ]

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

Одно из решений состоит в том, чтобы умножить нечетные строки вашего «значения» на -1:

df.value.iloc[1::2] *= -1

Затем сгруппировать и сложить:

df.groupby('Date').sum()

Это сработало для меня.Если вы не хотите изменять исходный столбец «значение», вы можете создать новый столбец, работать с ним, а затем удалить этот столбец в конце.

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

Учитывая

>>> df
      Date  Strike_price  value
0   1/1/18         10000     55
1   1/1/18         10100     40
2   1/1/18         10200     37
3   1/1/18         10300     25
4   2/1/18         10000     52
5   2/1/18         10100     38
6   2/1/18         10200     33
7   2/1/18         10300     21
8   3/1/18         10000     58
9   3/1/18         10100     43
10  3/1/18         10200     39
11  3/1/18         10300     26

вы можете выдать

>>> df.groupby('Date')['value'].agg(lambda s: s[::2].sum() - s[1::2].sum())
Date
1/1/18    27
2/1/18    26
3/1/18    28
Name: value, dtype: int64

В качестве альтернативы вы можете предпочесть

>>> df.groupby('Date', as_index=False)['value'].agg(lambda s: s[::2].sum() - s[1::2].sum())
     Date  value
0  1/1/18     27
1  2/1/18     26
2  3/1/18     28
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...