.xsを介してスライスしながらmultiIndexDataFrameでany()とall()を使用する:奇妙な動作または私だけ?

user5960761

私はPythonとこのコミュニティにかなり慣れていないので、非常に明白である可能性が最も高いことについての私の深い混乱を説明しようとするアマチュア的な試みを許してください。とにかく..

「データ」というデータフレームがあります。それは「日付」と「おなら」からなる2つのレベルでmultiIndexedです。

「integrated_daily_difference」という単一の列があります。

「おなら」のタイプは「pandas.core.index.Index」であり、次の方法で作成されたと見なすことができます。 farts = data.index.levels[1]

ここで、おならの任意のインデックス値でデータフレームのスライスビューを取得したいとします。つまり、おなら[1]

私:

data.xs(farts[1], level = 1)

コンピューター:

                  integrated_daily_difference
        date    
2015-05-21 00:00:00+00:00    0.000000
2015-05-22 00:00:00+00:00    0.000000
2015-05-26 00:00:00+00:00   -0.024497
2015-05-27 00:00:00+00:00   -0.051144
2015-05-28 00:00:00+00:00   -0.079841
2015-05-29 00:00:00+00:00   -0.106666
2015-06-01 00:00:00+00:00   -0.131245
2015-06-02 00:00:00+00:00   -0.157428
2015-06-03 00:00:00+00:00   -0.184057
2015-06-04 00:00:00+00:00   -0.209755
2015-06-05 00:00:00+00:00   -0.234588
2015-06-08 00:00:00+00:00   -0.262365
2015-06-09 00:00:00+00:00   -0.291890
2015-06-10 00:00:00+00:00   -0.320943
2015-06-11 00:00:00+00:00   -0.352627
2015-06-12 00:00:00+00:00   -0.381425
2015-06-15 00:00:00+00:00   -0.404055

私:

data.xs(farts[1], level = 1) < 0 

コンピューター:

                integrated_daily_difference
         date   
2015-05-21 00:00:00+00:00   False
2015-05-22 00:00:00+00:00   False
2015-05-26 00:00:00+00:00   True
2015-05-27 00:00:00+00:00   True
2015-05-28 00:00:00+00:00   True
2015-05-29 00:00:00+00:00   True
2015-06-01 00:00:00+00:00   True
2015-06-02 00:00:00+00:00   True
2015-06-03 00:00:00+00:00   True
2015-06-04 00:00:00+00:00   True
2015-06-05 00:00:00+00:00   True
2015-06-08 00:00:00+00:00   True
2015-06-09 00:00:00+00:00   True
2015-06-10 00:00:00+00:00   True
2015-06-11 00:00:00+00:00   True
2015-06-12 00:00:00+00:00   True
2015-06-15 00:00:00+00:00   True

スライスされたデータフレーム内の任意の場所に値が存在するかどうかが返されると思いますので、結果はTrueですか?

私:

data.xs(farts[1], level = 1).any()

コンピューター:

integrated_daily_difference    True
dtype: bool

OK、これはすべて意味があります。今、奇妙なもののために..

私:

data.xs(farts[1], level = 1).any() < 0

コンピューター:

integrated_daily_difference    False
dtype: bool

えっ……?

私:

data.xs(farts[1], level = 1).any(axis = 0) < 0

コンピューター:

integrated_daily_difference    False
dtype: bool

私:

data.xs(farts[1], level = 1).any(axis = 1) < 0

コンピューター:

       date
2015-05-21 00:00:00+00:00    False
2015-05-22 00:00:00+00:00    False
2015-05-26 00:00:00+00:00    False
2015-05-27 00:00:00+00:00    False
2015-05-28 00:00:00+00:00    False
2015-05-29 00:00:00+00:00    False
2015-06-01 00:00:00+00:00    False
2015-06-02 00:00:00+00:00    False
2015-06-03 00:00:00+00:00    False
2015-06-04 00:00:00+00:00    False
2015-06-05 00:00:00+00:00    False
2015-06-08 00:00:00+00:00    False
2015-06-09 00:00:00+00:00    False
2015-06-10 00:00:00+00:00    False
2015-06-11 00:00:00+00:00    False
2015-06-12 00:00:00+00:00    False
2015-06-15 00:00:00+00:00    False

私:

data.xs(farts[1], level = 1).any(axis = 1) <= 0

コンピューター:

        date
2015-05-21 00:00:00+00:00     True
2015-05-22 00:00:00+00:00     True
2015-05-26 00:00:00+00:00    False
2015-05-27 00:00:00+00:00    False
2015-05-28 00:00:00+00:00    False
2015-05-29 00:00:00+00:00    False
2015-06-01 00:00:00+00:00    False
2015-06-02 00:00:00+00:00    False
2015-06-03 00:00:00+00:00    False
2015-06-04 00:00:00+00:00    False
2015-06-05 00:00:00+00:00    False
2015-06-08 00:00:00+00:00    False
2015-06-09 00:00:00+00:00    False
2015-06-10 00:00:00+00:00    False
2015-06-11 00:00:00+00:00    False
2015-06-12 00:00:00+00:00    False
2015-06-15 00:00:00+00:00    False

私:

data.xs(farts[1], level = 1).any(axis = 0) <= 0

コンピューター:

integrated_daily_difference    False
dtype: bool

それから私のコンピューターは私をマニアックに笑い始め、私の頭は爆発しました...

しかし、もっと真剣に、ここで何が起こっているのでしょうか?私の目標は、単一列のデータフレーム内のすべてまたは一部の値が条件を満たすかどうかを確認し、ブール値のTrueまたはFalseを返すことでした。any()を正しく使用していないようですので、助けを求めています。

どんな入力でも大歓迎です。前もって感謝します!

hashcode55

まず、パンダのドキュメントに従って、意味を定義しましょう-

要求された軸上でいずれかの要素がTrueであるかどうかを返します

今あなたが書くとき-

data.xs(farts[1], level = 1).any()

それだけの値のいずれかがtruthyであるかどうかをチェックしますが、それだけで0がFalseとし、真など他の番号とさせていただきますを意味し、数字をチェックします与えられた条件がないように。がある0そのほかの数字は、それはTrueを返します。

今、あなたはチェックします-

data.xs(farts[1], level = 1).any() < 0 

ただし、整数で表した場合、Trueは1、Falseは0であるため、出力がTrue(1)であるため、Falseが返されdata.xs(farts[1], level = 1).any()ます。

data.xs(farts[1], level = 1).any() == 1

Trueを返します。

さて、あなたがそうすると何が起こるか見てみましょう-

data.xs(farts[1], level = 1).any(axis = 1) <= 0 

最初に軸を変更data.xs(farts[1], level = 1).any(axis = 1)し、値に応じてTrueとFalseのみを返します(0以外の値の場合はTrue / 1、0の値の場合はFalse / 0)。最初の2つの値は0s / Falseであり、条件「<= 0」を満たしているため、表示される出力が得られます。やってみてください-

data.xs(farts[1], level = 1).any(axis = 1) == 1

正反対の出力が得られます。

any()とは異なり、all()の動作は異なります...すべてがTrueの場合はtrueを返し、すべてがFalseの場合はFalseを返します。

そして、言及するだけで-

anyorORallandは、あなたが考えるかもしれないと同じではありません....またはととはビット単位の演算であり、短絡評価に従いますが、すべての関数であり、すべての条件をウォークスルーします。

それが役に立てば幸い :)

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

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

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ