パンダは、同様の値がすべて有効な場合にのみデータフレームを更新します

ドン・ジュリオ

私が達成しようとしていることを説明するために、この単純化された例を書きました。

import pandas as pd
import pytest

def enable_rows(df, row, myrange):
    # Need to modify this
    df.loc[row + myrange:, 'enabled'] = True
    df.loc[:row - myrange, 'enabled'] = True

def starting_df():
    # just re-creates the initial dataframe to check on values
    distance = {1: (100.0, 'a', False),
                2: (100.0, 'a', False),
                3: (100.0, 'a', False),
                4: (700.0, 'b', False),
                5: (700.0, 'b', False),
                6: (900.0, 'c', False)}

    return pd.DataFrame(data=list(distance.values()), index=list(
        distance.keys()), columns=['distance', 'letter', 'enabled'])

def test_enable(center_row, myrange):
    # convenience function to eye-candy the executions.
    df = starting_df()
    enable_rows(df, center_row, myrange)
    print(df)

    # assertions
    enabled = df.loc[df.enabled]
    if not ((len(enabled) == 3) and
            (len(enabled.loc[df.distance == 100.0]) == 0) and
            (len(enabled.loc[df.distance > 100.0]) == 3)):
        print("wrong result")

test_enable(1, 2)
test_enable(2, 1)

距離データフレームには、同じ列を持つ複数の条件付き行がdistanceありletterます。最初はすべてですenabled == False

インデックスと値にenabled == True基づいてそれらのいくつかを設定する必要があります。これにより、rowインデックスのあるrangerangeから距離のあるすべての行rowが有効になります(これでenable_rows関数を取得できました)。

さらに、1つのdistance値ですべての行が有効になっていない場合は、何も有効にしないでください。

上記のコードの両方の例では、一部のdistance == 100.0行がまだ有効になっていないため、100.0のいずれも有効にしないでください。

結果のデータフレームは次のようになります。

   distance letter  enabled
1     100.0      a    False
2     100.0      a    False
3     100.0      a    False
4     700.0      b     True
5     700.0      b     True
6     900.0      c     True

ただし、プログラムの実際の出力は次のとおりです。

   distance letter  enabled
1     100.0      a    False
2     100.0      a    False
3     100.0      a     True
4     700.0      b     True
5     700.0      b     True
6     900.0      c     True
wrong result
   distance letter  enabled
1     100.0      a     True
2     100.0      a    False
3     100.0      a     True
4     700.0      b     True
5     700.0      b     True
6     900.0      c     True
wrong result

それenable_rowsを取得するためにどのように更新できますか?

b-fg

あなただけに必要groupby 'distances'transformすべての場合、結果enabledの値がありませんTrueこれは次の方法で実行できます。

df['enabled'] = df.groupby('distance')['enabled'].transform(lambda x: all(x)==True)

ここで使用できるもの

def enable_rows(df, row, myrange):
    # Need to modify this
    df.loc[row + myrange:, 'enabled'] = True
    df.loc[:row - myrange, 'enabled'] = True
    df['enabled'] = df.groupby('distance')['enabled'].transform(lambda x: all(x)==True)

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

パンダは、データフレーム内のすべての列が等しい場合に値を設定します

分類Dev

すべての値がRのデータフレームの同じ列にある場合のパーセンテージを計算します

分類Dev

すべての列に特定のパターンが含まれている場合は、パンダデータフレームの行を選択します

分類Dev

行と列の値が同じ場合にのみ、2つのパンダデータフレーム値を追加します

分類Dev

値が他のデータフレームにない場合、パンダはデータフレームから行を除外します

分類Dev

列行の値がゼロの場合、パンダデータフレームのすべての列のすべての行を削除します

分類Dev

パンダのデータフレームを更新し、データが存在する場合は値を更新します

分類Dev

類似している2つの列に基づいてパンダのデータフレームを並べ替えますが、一方に値がある場合は一方がNaNになります

分類Dev

パンダの別のデータフレームからの同様の値に基づいて、データフレームの列に入力します

分類Dev

パンダ同様のキーに基づいて2つのデータフレームを分割します

分類Dev

パンダ:グループ内の値に同様の値が含まれている場合、データからグループを削除します

分類Dev

インデックスが一致しない場合にパンダのデータフレームを更新する最も効率的な方法

分類Dev

列に特定の値が含まれている場合は、パンダデータフレームの行をドロップします。

分類Dev

列の値が同じ場合にのみデータフレームをマージします

分類Dev

値がnullの場合は、別のデータフレームパンダからデータフレームの値を変更します

分類Dev

パンダはデータフレームを結合し、すべての初期データフレームに値が表示されない行をドロップします

分類Dev

パンダは、列の同じ値に基づいてデータフレームをマージします

分類Dev

値のリストがデータフレーム列にない場合はtrueを返します(すべての単一の値)

分類Dev

セルに「-」が含まれている場合、パンダはデータフレーム値を更新します

分類Dev

Pythonパンダデータフレームは列値のすべての組み合わせを取得しますか?

分類Dev

パンダのデータフレームにすべての行を合わせてから、データに基づいてのみ変換します

分類Dev

条件が真の場合、パンダはデータフレームを複数に分割します

分類Dev

パンダ:同じ列値を持つ複数の行を組み合わせて、すべての可能性をカバーする新しいデータフレームを作成するにはどうすればよいですか?

分類Dev

パンダ:列の値に基づいて2つのデータフレームをマージします。同じ列値を含む複数の行の場合、それらを異なる列に追加します

分類Dev

列の値が欠落している場合は、パンダのデータフレームに増分値で置き換えます

分類Dev

2つのパンダデータフレームの日付を比較し、日付が類似している場合は値を追加しますか?

分類Dev

パンダでは、欠測値のあるデータフレームに、同様のインデックスが指定された別のデータフレームの値をパッチする方法を教えてください。

分類Dev

2つのデータフレームを結合し、すべての列をパンダに保持します

分類Dev

パンダは2つのデータフレームを結合し、一部の行が他のデータフレームに存在しない場合、1つのデータセットからのデータを保持します

Related 関連記事

  1. 1

    パンダは、データフレーム内のすべての列が等しい場合に値を設定します

  2. 2

    すべての値がRのデータフレームの同じ列にある場合のパーセンテージを計算します

  3. 3

    すべての列に特定のパターンが含まれている場合は、パンダデータフレームの行を選択します

  4. 4

    行と列の値が同じ場合にのみ、2つのパンダデータフレーム値を追加します

  5. 5

    値が他のデータフレームにない場合、パンダはデータフレームから行を除外します

  6. 6

    列行の値がゼロの場合、パンダデータフレームのすべての列のすべての行を削除します

  7. 7

    パンダのデータフレームを更新し、データが存在する場合は値を更新します

  8. 8

    類似している2つの列に基づいてパンダのデータフレームを並べ替えますが、一方に値がある場合は一方がNaNになります

  9. 9

    パンダの別のデータフレームからの同様の値に基づいて、データフレームの列に入力します

  10. 10

    パンダ同様のキーに基づいて2つのデータフレームを分割します

  11. 11

    パンダ:グループ内の値に同様の値が含まれている場合、データからグループを削除します

  12. 12

    インデックスが一致しない場合にパンダのデータフレームを更新する最も効率的な方法

  13. 13

    列に特定の値が含まれている場合は、パンダデータフレームの行をドロップします。

  14. 14

    列の値が同じ場合にのみデータフレームをマージします

  15. 15

    値がnullの場合は、別のデータフレームパンダからデータフレームの値を変更します

  16. 16

    パンダはデータフレームを結合し、すべての初期データフレームに値が表示されない行をドロップします

  17. 17

    パンダは、列の同じ値に基づいてデータフレームをマージします

  18. 18

    値のリストがデータフレーム列にない場合はtrueを返します(すべての単一の値)

  19. 19

    セルに「-」が含まれている場合、パンダはデータフレーム値を更新します

  20. 20

    Pythonパンダデータフレームは列値のすべての組み合わせを取得しますか?

  21. 21

    パンダのデータフレームにすべての行を合わせてから、データに基づいてのみ変換します

  22. 22

    条件が真の場合、パンダはデータフレームを複数に分割します

  23. 23

    パンダ:同じ列値を持つ複数の行を組み合わせて、すべての可能性をカバーする新しいデータフレームを作成するにはどうすればよいですか?

  24. 24

    パンダ:列の値に基づいて2つのデータフレームをマージします。同じ列値を含む複数の行の場合、それらを異なる列に追加します

  25. 25

    列の値が欠落している場合は、パンダのデータフレームに増分値で置き換えます

  26. 26

    2つのパンダデータフレームの日付を比較し、日付が類似している場合は値を追加しますか?

  27. 27

    パンダでは、欠測値のあるデータフレームに、同様のインデックスが指定された別のデータフレームの値をパッチする方法を教えてください。

  28. 28

    2つのデータフレームを結合し、すべての列をパンダに保持します

  29. 29

    パンダは2つのデータフレームを結合し、一部の行が他のデータフレームに存在しない場合、1つのデータセットからのデータを保持します

ホットタグ

アーカイブ