マルチインデックスパンダデータフレームの式で他の変数を使用して新しい変数を作成する

user8270077

次のマルチインデックスパンダデータフレームがあります。

toy.to_json()
'{"["ISRG","Price"]":{"2004-12-31":10.35,"2005-01-28":10.35,"2005-03-31":14.15,"2005-04-01":14.15,"2005-04-29":14.15,"2005-06-30":15.51,"2005-07-01":15.51,"2005-07-29":15.51,"2005-09-30":20.77,"2005-10-28":20.77},"["ISRG","Price_high"]":{"2004-12-31":13.34,"2005-01-28":13.34,"2005-03-31":16.27,"2005-04-01":16.27,"2005-04-29":16.27,"2005-06-30":17.35,"2005-07-01":17.35,"2005-07-29":17.35,"2005-09-30":25.96,"2005-10-28":25.96},"["ISRG","Price_low"]":{"2004-12-31":7.36,"2005-01-28":7.36,"2005-03-31":12.03,"2005-04-01":12.03,"2005-04-29":12.03,"2005-06-30":13.67,"2005-07-01":13.67,"2005-07-29":13.67,"2005-09-30":15.58,"2005-10-28":15.58},"["EW","Price"]":{"2004-12-31":9.36,"2005-01-28":9.36,"2005-03-31":10.47,"2005-04-01":10.47,"2005-04-29":10.47,"2005-06-30":11.07,"2005-07-01":11.07,"2005-07-29":11.07,"2005-09-30":10.86,"2005-10-28":10.86},"["EW","Price_high"]":{"2004-12-31":10.56,"2005-01-28":10.56,"2005-03-31":11.07,"2005-04-01":11.07,"2005-04-29":11.07,"2005-06-30":11.69,"2005-07-01":11.69,"2005-07-29":11.69,"2005-09-30":11.56,"2005-10-28":11.56},"["EW","Price_low"]":{"2004-12-31":8.15,"2005-01-28":8.15,"2005-03-31":9.87,"2005-04-01":9.87,"2005-04-29":9.87,"2005-06-30":10.46,"2005-07-01":10.46,"2005-07-29":10.46,"2005-09-30":10.16,"2005-10-28":10.16},"["volatility",""]":{"2004-12-31":null,"2005-01-28":null,"2005-03-31":null,"2005-04-01":null,"2005-04-29":null,"2005-06-30":null,"2005-07-01":null,"2005-07-29":null,"2005-09-30":null,"2005-10-28":null}}'

ここに画像の説明を入力してください

1行のコードで、次の式で定義される2番目のレベル(つまり、「ISGR」と「EW」の両方の下)に「volatility」という新しい列を作成したいと思います。

(100 * (Price_high - Price_low)/Price).round()

2つの問題があります:a)新しい列を作成できないb)割り当てられない

これは私が列を作成するために使用したコードですが、失敗します:

idx = pd.IndexSlice

100 *( toy.loc[:, idx[:, 'Price_high']]  - toy.loc[:, idx[:, 'Price_low']].div(toy.loc[:, idx[:, 'Price']])).round()

このコード行はNaNを返します。

ここに画像の説明を入力してください

ジェズリール

選択したDataFrameでMultiIndex DataFrame同じ出力が必要なMultiIndexので、次を使用しますrename

idx = pd.IndexSlice

Price_high =  toy.loc[:, idx[:, 'Price_high']].rename(columns={'Price_high':'new'})
Price_low = toy.loc[:, idx[:, 'Price_low']].rename(columns={'Price_low':'new'})
Price = toy.loc[:, idx[:, 'Price']].rename(columns={'Price':'new'})
df4 = (100 * (Price_high - Price_low)/Price).round()
print (df4)
            ISRG    EW
             new   new
2004-12-31  58.0  26.0
2005-01-28  58.0  26.0
2005-03-31  30.0  11.0
2005-04-01  30.0  11.0
2005-04-29  30.0  11.0
2005-06-30  24.0  11.0
2005-07-01  24.0  11.0
2005-07-29  24.0  11.0
2005-09-30  50.0  13.0
2005-10-28  50.0  13.0

別のアプローチはDataFrame.xs、第2レベルを回避するために使用するため、次のことを行わずに作業しMultiIndex DataFramesます。

Price_high =  toy.xs('Price_high', axis=1, level=1)
Price_low = toy.xs('Price_low', axis=1, level=1)
Price = toy.xs('Price', axis=1, level=1)
df4 = (100 * (Price_high - Price_low)/Price).round()
print (df4)
            ISRG    EW
2004-12-31  58.0  26.0
2005-01-28  58.0  26.0
2005-03-31  30.0  11.0
2005-04-01  30.0  11.0
2005-04-29  30.0  11.0
2005-06-30  24.0  11.0
2005-07-01  24.0  11.0
2005-07-29  24.0  11.0
2005-09-30  50.0  13.0
2005-10-28  50.0  13.0

そして、必要に応じてMultiIndex追加しMultiIndex.from_productます:

df4.columns = pd.MultiIndex.from_product([df4.columns, ['new']])
print (df4)
            ISRG    EW
             new   new
2004-12-31  58.0  26.0
2005-01-28  58.0  26.0
2005-03-31  30.0  11.0
2005-04-01  30.0  11.0
2005-04-29  30.0  11.0
2005-06-30  24.0  11.0
2005-07-01  24.0  11.0
2005-07-29  24.0  11.0
2005-09-30  50.0  13.0
2005-10-28  50.0  13.0

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

マルチインデックスを使用してパンダデータフレームの単一行を複数行に合計する方法は?

分類Dev

列と行のインデックスを変数として使用して、パンダのデータフレームにデータを入力します

分類Dev

パンダを使用してcsvを作成し、時間と数値データをマルチレベルのインデックスに整理する方法

分類Dev

別の変数の数式を使用して、データフレームに新しい列を作成する

分類Dev

他の列の望ましい部分にインデックスを付けて、パンダデータフレームに新しい列を作成する方法

分類Dev

マルチレベルインデックスを使用して新しいパンダデータフレームを構築する

分類Dev

パンダ:.locを使用して新しいデータフレームを作成するときに変数の値を使用する方法

分類Dev

パンダデータフレームのインデックスとして複数の列を使用する

分類Dev

パンダ:マルチインデックスデータフレームに新しい(サブレベル)列を作成し、値を割り当てます

分類Dev

インデックスを使用してパンダのマルチインデックスデータフレームを反復処理する方法

分類Dev

ループを使用してパンダで複数のデータフレームを変換する

分類Dev

データフレームの各行に新しい値を返すパンダデータフレームで変換関数を使用する

分類Dev

パンダのマルチインデックスデータフレームを、すべてのインデックスが列に含まれる単純なデータフレームに変換します

分類Dev

Pythonでマルチインデックスを使用して複数のデータフレームをマージする

分類Dev

マスターデータフレームを分割して、ループ内で複数のデータフレームを作成する-パンダ

分類Dev

高度なパンダ:特定の行インデックスからマルチインデックスパンダデータフレームを作成します

分類Dev

長さが異なるインデックスとして配列を使用して、パンダデータフレームで一度に複数の値を変更するにはどうすればよいですか?

分類Dev

期間を定義する2つの日時変数を使用してデータフレームのインデックスを再作成する方法

分類Dev

パンダデータフレームで欠落している行の数をユーザーインデックスでカウントします

分類Dev

パンダのデータフレームをピボットして、マルチインデックスの列を作成します

分類Dev

pandasデータフレームを再編成して列を新しいヘッダーに変換します。元のヘッダーは既存の列を持つマルチインデックスの一部になります

分類Dev

マルチインデックスのあるパンダのデータフレームを、マルチインデックスの小さい別のデータフレームで除算します

分類Dev

パンダの複数の列をマッピングして、データフレームに新しい列を作成する

分類Dev

パンダのデータフレームをマルチインデックスデータフレームに変換する方法

分類Dev

マルチレベルのインデックス付きパンダデータフレームの列の合計値を、新しい列の値の条件として使用する方法

分類Dev

パンダ:マルチインデックスデータフレームのインデックスタイプを変換する

分類Dev

マルチインデックス列ヘッダーを使用してデータフレームの形状をワイドからロングに変更

分類Dev

連続する値をカウントするパンダデータフレームの新しい変数

分類Dev

他の変数のインデックス位置と値に基づいて新しい変数を作成する

Related 関連記事

  1. 1

    マルチインデックスを使用してパンダデータフレームの単一行を複数行に合計する方法は?

  2. 2

    列と行のインデックスを変数として使用して、パンダのデータフレームにデータを入力します

  3. 3

    パンダを使用してcsvを作成し、時間と数値データをマルチレベルのインデックスに整理する方法

  4. 4

    別の変数の数式を使用して、データフレームに新しい列を作成する

  5. 5

    他の列の望ましい部分にインデックスを付けて、パンダデータフレームに新しい列を作成する方法

  6. 6

    マルチレベルインデックスを使用して新しいパンダデータフレームを構築する

  7. 7

    パンダ:.locを使用して新しいデータフレームを作成するときに変数の値を使用する方法

  8. 8

    パンダデータフレームのインデックスとして複数の列を使用する

  9. 9

    パンダ:マルチインデックスデータフレームに新しい(サブレベル)列を作成し、値を割り当てます

  10. 10

    インデックスを使用してパンダのマルチインデックスデータフレームを反復処理する方法

  11. 11

    ループを使用してパンダで複数のデータフレームを変換する

  12. 12

    データフレームの各行に新しい値を返すパンダデータフレームで変換関数を使用する

  13. 13

    パンダのマルチインデックスデータフレームを、すべてのインデックスが列に含まれる単純なデータフレームに変換します

  14. 14

    Pythonでマルチインデックスを使用して複数のデータフレームをマージする

  15. 15

    マスターデータフレームを分割して、ループ内で複数のデータフレームを作成する-パンダ

  16. 16

    高度なパンダ:特定の行インデックスからマルチインデックスパンダデータフレームを作成します

  17. 17

    長さが異なるインデックスとして配列を使用して、パンダデータフレームで一度に複数の値を変更するにはどうすればよいですか?

  18. 18

    期間を定義する2つの日時変数を使用してデータフレームのインデックスを再作成する方法

  19. 19

    パンダデータフレームで欠落している行の数をユーザーインデックスでカウントします

  20. 20

    パンダのデータフレームをピボットして、マルチインデックスの列を作成します

  21. 21

    pandasデータフレームを再編成して列を新しいヘッダーに変換します。元のヘッダーは既存の列を持つマルチインデックスの一部になります

  22. 22

    マルチインデックスのあるパンダのデータフレームを、マルチインデックスの小さい別のデータフレームで除算します

  23. 23

    パンダの複数の列をマッピングして、データフレームに新しい列を作成する

  24. 24

    パンダのデータフレームをマルチインデックスデータフレームに変換する方法

  25. 25

    マルチレベルのインデックス付きパンダデータフレームの列の合計値を、新しい列の値の条件として使用する方法

  26. 26

    パンダ:マルチインデックスデータフレームのインデックスタイプを変換する

  27. 27

    マルチインデックス列ヘッダーを使用してデータフレームの形状をワイドからロングに変更

  28. 28

    連続する値をカウントするパンダデータフレームの新しい変数

  29. 29

    他の変数のインデックス位置と値に基づいて新しい変数を作成する

ホットタグ

アーカイブ