Pandas DataFrame、複数の行に基づいて新しい列要素を計算する方法

ロベルト・ベルティネッティ

現在、さまざまな行の内容に基づいて、特定の行の統計的検定を実装しようとしています。次の画像のデータフレームを考えます。

DataFrame列「テンプレート」に同じ文字列を持つデータフレームのすべての列を考慮に入れる関数に基づいて、新しい列を作成したいと思います。

たとえば、この場合、テンプレート「[Are | Off]」の行が2つあり、それらの行ごとに、「クリック数」、「インプレッション数」、「コンバージョン数」に基づいて新しい列に要素を作成する必要があります。両方の行の "。

この問題にどのようにアプローチするのが最善ですか?

PS:私がプロのコードではないことに気付くかもしれないので、私が問題を説明している方法について事前に謝罪します:Dしかし、私は本当にあなたの助けに感謝します!

これを私がExcelで解決した式は次のとおりです。

Excelカイ2乗検定

デイビス・カーケンダル

これは一般的すぎるかもしれませんが、テンプレート名に応じて異なることを行う必要がある場合は、ある種の関数マップを使用します。

import pandas as pd
import numpy as np
import collections

n = 5
template_column = list(['are|off', 'are|off', 'comp', 'comp', 'comp|city'])
n = len(template_column)
df = pd.DataFrame(np.random.random((n, 3)), index=range(n), columns=['Clicks', 'Impressions', 'Conversions'])
df['template'] = template_column

# Use a defaultdict so that you can define a default value if a template is
# note defined
function_map = collections.defaultdict(lambda: lambda df: np.nan)

# Now define functions to compute what the new columns should do depending on
# the template.
function_map.update({
    'are|off': lambda df: df.sum().sum(),
    'comp': lambda df: df.mean().mean(),
    'something else': lambda df: df.mean().max()
})

# The lambda functions are just placeholders.  You could do whatever you want in these functions... for example:

def do_special_stuff(df):
    """Do something that uses rows and columns... 
    you could also do looping or whatever you want as long 
    as the result is a scalar, or a sequence with the same 
    number of columns as the original template DataFrame
    """
    crazy_stuff = np.prod(np.sum(df.values,axis=1)[:,None] + 2*df.values, axis=1)
    return crazy_stuff

function_map['comp'] = do_special_stuff

def wrap(f):
    """Wrap a function so that it returns an updated dataframe"""

    def wrapped(df):
        df = df.copy()
        new_column_data = f(df.drop('template', axis=1))
        df['new_column'] = new_column_data
        return df

    return wrapped

# wrap all the functions so that each template has a function defined that does
# the correct thing
series_function_map = {k: wrap(function_map[k]) for k in df['template'].unique()}

# throw everything back together
new_df = pd.concat([series_function_map[label](group)
                    for label, group in df.groupby('template')],
                   ignore_index=True)

# print your shiny new dataframe
print(new_df)

結果は次のようになります。

     Clicks  Impressions  Conversions   template  new_column
0  0.959765     0.111648     0.769329    are|off    4.030594
1  0.809917     0.696348     0.683587    are|off    4.030594
2  0.265642     0.656780     0.182373       comp    0.502015
3  0.753788     0.175305     0.978205       comp    0.502015
4  0.269434     0.966951     0.478056  comp|city         NaN

それが役に立てば幸い!

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

Pandas Dataframeの複数の列に基づいて数式を計算しますが、多くの中間列を作成することはありません

分類Dev

Pandasデータフレーム-複数の条件計算に基づいて複数の列を作成します

分類Dev

Pandas DataFrame:列の条件に基づいて重複する行を削除します

分類Dev

Pandasデータフレームの複数の行に基づいて計算を実行する

分類Dev

Pandas.Dataframeの複数の列に基づいて複数の重複行をマージします

分類Dev

Pandas DataFrameは、groupby複数の条件に基づいて新しい列値を追加します

分類Dev

Pandas DataFrameの他の列の値に基づいて新しい列を作成する方法

分類Dev

pandas DataFrame:別の列のブール値に基づいて合計を計算します

分類Dev

Pandas Dataframe:辞書のリストに基づいて複数の行を更新する最速の方法

分類Dev

別のcolumn_Pandasに基づいて行間の差を計算します

分類Dev

Pandas DataFrameは、リストで名前が指定されている複数の列の値に基づいて行を選択します

分類Dev

Pandas / Python:行の値と他のDataFrameに基づいて新しい列の値を設定します

分類Dev

Pandas DataFrame:複数の基準に基づいてNaN値を入力します

分類Dev

Pandas DataFrameの行の他の値に基づいて、行の複数のセルを強調表示します

分類Dev

Pandasシリーズを文字列の位置に基づいて複数のDataFrame列に分割します

分類Dev

Python PandasのDataFrameの機能に基づいて計算しますか?

分類Dev

Pandas Dataframeは、他の列の数に基づいて列を追加します

分類Dev

pandas-複数の行の値に基づいて、合計された列データの行をデータフレームに追加します

分類Dev

pandas別の列に基づいて新しい列の値を導出する方法

分類Dev

データ フレームの他の列に基づいて新しい pandas 列を作成する方法は?

分類Dev

python(pandas)異なる行の値に基づいて新しい列を作成する

分類Dev

python/pandasで部分的にそれ自体に基づいて列を計算する

分類Dev

Python Pandas:1つの列に基づいて重複する行を削除し、複数の列から情報を連結します

分類Dev

python pandasは、日付列に基づいて日数を計算します

分類Dev

pandas-重複に基づいて新しい列を作成します

分類Dev

特定の列セットの値に基づいてpandas.DataFrameに行をドロップする方法は?

分類Dev

複数の行の値に基づいて新しい列を計算する

分類Dev

ある条件に基づいてPandas DataFrameを反復処理して新しいDateFrameを作成する方法

分類Dev

別の行の条件に基づいてPandasデータフレームに新しい列を作成する最適な方法は何ですか?

Related 関連記事

  1. 1

    Pandas Dataframeの複数の列に基づいて数式を計算しますが、多くの中間列を作成することはありません

  2. 2

    Pandasデータフレーム-複数の条件計算に基づいて複数の列を作成します

  3. 3

    Pandas DataFrame:列の条件に基づいて重複する行を削除します

  4. 4

    Pandasデータフレームの複数の行に基づいて計算を実行する

  5. 5

    Pandas.Dataframeの複数の列に基づいて複数の重複行をマージします

  6. 6

    Pandas DataFrameは、groupby複数の条件に基づいて新しい列値を追加します

  7. 7

    Pandas DataFrameの他の列の値に基づいて新しい列を作成する方法

  8. 8

    pandas DataFrame:別の列のブール値に基づいて合計を計算します

  9. 9

    Pandas Dataframe:辞書のリストに基づいて複数の行を更新する最速の方法

  10. 10

    別のcolumn_Pandasに基づいて行間の差を計算します

  11. 11

    Pandas DataFrameは、リストで名前が指定されている複数の列の値に基づいて行を選択します

  12. 12

    Pandas / Python:行の値と他のDataFrameに基づいて新しい列の値を設定します

  13. 13

    Pandas DataFrame:複数の基準に基づいてNaN値を入力します

  14. 14

    Pandas DataFrameの行の他の値に基づいて、行の複数のセルを強調表示します

  15. 15

    Pandasシリーズを文字列の位置に基づいて複数のDataFrame列に分割します

  16. 16

    Python PandasのDataFrameの機能に基づいて計算しますか?

  17. 17

    Pandas Dataframeは、他の列の数に基づいて列を追加します

  18. 18

    pandas-複数の行の値に基づいて、合計された列データの行をデータフレームに追加します

  19. 19

    pandas別の列に基づいて新しい列の値を導出する方法

  20. 20

    データ フレームの他の列に基づいて新しい pandas 列を作成する方法は?

  21. 21

    python(pandas)異なる行の値に基づいて新しい列を作成する

  22. 22

    python/pandasで部分的にそれ自体に基づいて列を計算する

  23. 23

    Python Pandas:1つの列に基づいて重複する行を削除し、複数の列から情報を連結します

  24. 24

    python pandasは、日付列に基づいて日数を計算します

  25. 25

    pandas-重複に基づいて新しい列を作成します

  26. 26

    特定の列セットの値に基づいてpandas.DataFrameに行をドロップする方法は?

  27. 27

    複数の行の値に基づいて新しい列を計算する

  28. 28

    ある条件に基づいてPandas DataFrameを反復処理して新しいDateFrameを作成する方法

  29. 29

    別の行の条件に基づいてPandasデータフレームに新しい列を作成する最適な方法は何ですか?

ホットタグ

アーカイブ