私が達成しようとしていることを説明するために、この単純化された例を書きました。
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
インデックスのあるrange
行range
から距離のあるすべての行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
を取得するためにどのように更新できますか?
あなただけに必要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]
コメントを追加