グループ化されたパンダデータフレームに独自の関数を正しく適用する

ペトルンソン

私は次のようなパンダのデータフレームを持っています:

   ticket date         close  
0    AAA  2018-01-12  176.16
1    AAA  2018-01-13  176.49
3    AAA  2018-01-14  176.00
4    BBB  2018-01-12  78.19
5    BBB  2018-01-13  79.90
6    BBB  2018-01-14  78.10

私は機能を持っています:

def rsi(dataframe, period, column = 'close'):
    delta = dataframe[column].diff()
    up, down = delta.copy(), delta.copy()
    up[up < 0] = 0
    down[down > 0] = 0
    rolling_up = up.ewm(com=period - 1, adjust=False).mean()
    rolling_down = down.ewm(com= period -1, adjust=False).mean().abs()
    rsi = 100 - 100 / (1 + rolling_up / rolling_down)
    dataframe['rsi'] =  rsi
    return dataframe

必要なのは、この関数を各groupby( 'ticket')のデータフレームに適用することです。これを試しましたが、機能しません。アドバイスをお願いします。

print(dataframe.groupby('ticket').apply(rsi, 2))

エラーが発生します:

重複する軸からインデックスを再作成することはできません

全体のソースコードは次のとおりです。

# -*- coding: utf-8 -*-

import json
import pandas
import requests
import datetime

def get_historical_prices(tickets, range):
    request_params = {'symbols': ','.join(tickets), 'types': 'chart', 'range': range}
    json = requests.get('https://api.iextrading.com/1.0/stock/market/batch', params = request_params).json()
    united_dataframe = pandas.DataFrame()
    for symbol in json:
        ticket_dataframe = pandas.DataFrame(json[symbol]['chart'])
        ticket_dataframe.insert(0, 'ticket', symbol)
        united_dataframe = united_dataframe.append(ticket_dataframe)
    return united_dataframe[['ticket', 'date', 'close']]

def rsi(dataframe, period, column = 'close'):
    delta = all_prices[column].diff()
    up, down = delta.copy(), delta.copy()
    up[up < 0] = 0
    down[down > 0] = 0
    rolling_up = up.ewm(com=period - 1, adjust=False).mean()
    rolling_down = down.ewm(com= period -1, adjust=False).mean().abs()
    rsi = 100 - 100 / (1 + rolling_up / rolling_down)
    dataframe['rsi'] =  rsi
    return dataframe

# Get the data
tickets = ['AAPL', 'FB', 'TSLA']
all_prices = get_historical_prices(tickets, '1m')

print(all_prices.groupby('ticket').apply(rsi, 2))
sgDysregulation

ソースコードに問題があります。この線

delta = all_prices[column].diff()

する必要があります

delta = dataframe[column].diff() 

それを修正することも問題なく実行されます。再割り当てにより、列rsiall_pricesieに追加されます

all_prices = all_prices.groupby('ticket').apply(rsi, 2)

最終的なタラと結果を以下に示します

In [20]: # -*- coding: utf-8 -*-
    ...: 
    ...: import json
    ...: import pandas
    ...: import requests
    ...: import datetime
    ...: 
    ...: def get_historical_prices(tickets, range):
    ...:     request_params = {'symbols': ','.join(tickets), 'types': 'chart', 'range': range}
    ...:     json = requests.get('https://api.iextrading.com/1.0/stock/market/batch', params = request_params).json()
    ...:     united_dataframe = pandas.DataFrame()
    ...:     for symbol in json:
    ...:         ticket_dataframe = pandas.DataFrame(json[symbol]['chart'])
    ...:         ticket_dataframe.insert(0, 'ticket', symbol)
    ...:         united_dataframe = united_dataframe.append(ticket_dataframe)
    ...:     return united_dataframe[['ticket', 'date', 'close']]
    ...: 
    ...: def rsi(dataframe, period, column = 'close'):
    ...:     delta = dataframe[column].diff()
    ...:     up, down = delta.copy(), delta.copy()
    ...:     up[up < 0] = 0
    ...:     down[down > 0] = 0
    ...:     rolling_up = up.ewm(com=period - 1, adjust=False).mean()
    ...:     rolling_down = down.ewm(com= period -1, adjust=False).mean().abs()
    ...:     rsi = 100 - 100 / (1 + rolling_up / rolling_down)
    ...:     dataframe['rsi'] = rsi
    ...:     return dataframe
    ...: 
    ...: # Get the data
    ...: tickets = ['AAPL', 'FB', 'TSLA']
    ...: all_prices = get_historical_prices(tickets, '1m')
    ...: 
    ...: all_prices = all_prices.groupby('ticket').apply(rsi, 2)
    ...: print(all_prices.head())
    ...: 
    ...: 
  ticket        date   close        rsi
0   AAPL  2018-01-12  177.09        NaN
1   AAPL  2018-01-16  176.19   0.000000
2   AAPL  2018-01-17  179.10  76.377953
3   AAPL  2018-01-18  179.26  78.208232
4   AAPL  2018-01-19  178.46  44.065484

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

パンダはユーザー定義関数を複数の列のグループ化されたデータフレームに適用します

分類Dev

Pythonパンダはグループ化されたデータフレームに関数を適用します

分類Dev

データフレーム値を指定された数のグループに分割し、関数を適用します-パンダ

分類Dev

パンダのグループ化されたデータの単一の列に関数を適用する

分類Dev

グループ化されたデータフレームに関数を適用し、複数の出力をデータフレームに保存します

分類Dev

グループ化されたデータフレームに「shift」を使用する関数を適用して、パンダから単純なデータフレームを返すことはできますか?

分類Dev

グループ化されたデータフレームをdplyrの独自の関数に渡します

分類Dev

グループ化されたセットに関数を適用し、列を既存のデータフレームにバインドする方法

分類Dev

Daskのグループ化されたデータフレームに関数を適用する:グループ化されたデータフレームを関数の引数としてどのように指定しますか?

分類Dev

文字列として宣言された関数をパンダのデータフレームに適用する

分類Dev

Pythonのデータフレームでグループ化されたものにいくつかの関数を適用します

分類Dev

グループ化されたパンダデータを元のデータフレームに適用する

分類Dev

日付にループし、パンダのデータフレームに関数を適用する

分類Dev

定義された関数をパンダのデータフレームに適用する方法

分類Dev

パンダのグループ化されたデータに列ごとにユーザー定義関数を適用する方法

分類Dev

パンダは、別の列でグループ化された1つの列のすべての行にカスタム関数を適用します

分類Dev

別の列のグループ化された値の合計によってパンダデータフレームの列を正規化する

分類Dev

グループ化されたデータフレームに一度にn行ずつカスタム関数を適用する

分類Dev

purrrを使用してグループ化されたデータフレームにマップ関数を適用します

分類Dev

パンダのデータフレームに関数を適用する

分類Dev

パンダのデータフレーム列に関数を適用する

分類Dev

パンダのグループ化されたデータにテキスト解析を適用する

分類Dev

グループ化されたデータフレームの列にあるアイテムのペアの数を数えます。(パンダ)

分類Dev

このパンダのデータフレームにcumcountを正しく適用する

分類Dev

パンダ、文字列インデックスでグループ化されたデータにカスタム関数を適用

分類Dev

「最後から」分割されたパンダのサブデータフレームにpython関数を適用して新しいデータフレームを取得するにはどうすればよいですか?

分類Dev

複数の列を使用したパンダデータフレームローリング適用関数

分類Dev

パンダのグループ化されたデータフレーム全体で値を減算する

分類Dev

グループ化されたデータフレームパンダで特定の行を取得する

Related 関連記事

  1. 1

    パンダはユーザー定義関数を複数の列のグループ化されたデータフレームに適用します

  2. 2

    Pythonパンダはグループ化されたデータフレームに関数を適用します

  3. 3

    データフレーム値を指定された数のグループに分割し、関数を適用します-パンダ

  4. 4

    パンダのグループ化されたデータの単一の列に関数を適用する

  5. 5

    グループ化されたデータフレームに関数を適用し、複数の出力をデータフレームに保存します

  6. 6

    グループ化されたデータフレームに「shift」を使用する関数を適用して、パンダから単純なデータフレームを返すことはできますか?

  7. 7

    グループ化されたデータフレームをdplyrの独自の関数に渡します

  8. 8

    グループ化されたセットに関数を適用し、列を既存のデータフレームにバインドする方法

  9. 9

    Daskのグループ化されたデータフレームに関数を適用する:グループ化されたデータフレームを関数の引数としてどのように指定しますか?

  10. 10

    文字列として宣言された関数をパンダのデータフレームに適用する

  11. 11

    Pythonのデータフレームでグループ化されたものにいくつかの関数を適用します

  12. 12

    グループ化されたパンダデータを元のデータフレームに適用する

  13. 13

    日付にループし、パンダのデータフレームに関数を適用する

  14. 14

    定義された関数をパンダのデータフレームに適用する方法

  15. 15

    パンダのグループ化されたデータに列ごとにユーザー定義関数を適用する方法

  16. 16

    パンダは、別の列でグループ化された1つの列のすべての行にカスタム関数を適用します

  17. 17

    別の列のグループ化された値の合計によってパンダデータフレームの列を正規化する

  18. 18

    グループ化されたデータフレームに一度にn行ずつカスタム関数を適用する

  19. 19

    purrrを使用してグループ化されたデータフレームにマップ関数を適用します

  20. 20

    パンダのデータフレームに関数を適用する

  21. 21

    パンダのデータフレーム列に関数を適用する

  22. 22

    パンダのグループ化されたデータにテキスト解析を適用する

  23. 23

    グループ化されたデータフレームの列にあるアイテムのペアの数を数えます。(パンダ)

  24. 24

    このパンダのデータフレームにcumcountを正しく適用する

  25. 25

    パンダ、文字列インデックスでグループ化されたデータにカスタム関数を適用

  26. 26

    「最後から」分割されたパンダのサブデータフレームにpython関数を適用して新しいデータフレームを取得するにはどうすればよいですか?

  27. 27

    複数の列を使用したパンダデータフレームローリング適用関数

  28. 28

    パンダのグループ化されたデータフレーム全体で値を減算する

  29. 29

    グループ化されたデータフレームパンダで特定の行を取得する

ホットタグ

アーカイブ