次のデータフレームがあるとします。
df = pd.DataFrame({'A':[1,2,3,400], 'B':[100,2,3,4]})
そして、50 より大きいすべての要素の位置 (インデックスと列による) を見つけたいと思います。つまり、正しい出力は次のようになります。
[(3,'A'), (0,'B')]
これを行うための最もpythonicな方法は何でしょうか?
次のデータフレームがあるとします。
df = pd.DataFrame({'A':[1,2,3,400], 'B':[100,2,3,4]})
そして、50 より大きいすべての要素の位置 (インデックスと列による) を見つけたいと思います。つまり、正しい出力は次のようになります。
[(3,'A'), (0,'B')]
これを行うための最もpythonicな方法は何でしょうか?
ここでスタックを使用してから、ブール値マスクを使用できます(50 を超える値の場合)。
In [11]: s = df.stack()
In [12]: s
Out[12]:
0 A 1
B 100
1 A 2
B 2
2 A 3
B 3
3 A 400
B 4
dtype: int64
In [13]: s[s > 50]
Out[13]:
0 B 100
3 A 400
dtype: int64
In [14]: s[s > 50].index
Out[14]:
MultiIndex
[(0, u'B'), (3, u'A')]
これをリストとして必要な場合:
In [15]: s[s > 50].index.tolist()
Out[15]: [(0, 'B'), (3, 'A')]
aが同様に機能する場合に、実際にaが必要かどうかを検討する価値があるかもしれません。さらに、 を使用すると、次の場合とは異なり、指先で高速操作の全世界を利用できます。MultiIndex
DataFrame
DataFrame
MultiIndex
In [44]: df = pd.DataFrame({'A':[1,2,3,400], 'B':[100,2,3,4]})
In [45]: df = df.reset_index()
In [46]: df
Out[46]:
index A B
0 0 1 100
1 1 2 2
2 2 3 3
3 3 400 4
In [47]: molten = melt(df, var_name='column', id_vars='index')
In [48]: molten
Out[48]:
index column value
0 0 A 1
1 1 A 2
2 2 A 3
3 3 A 400
4 0 B 100
5 1 B 2
6 2 B 3
7 3 B 4
In [49]: molten[molten.value > 50]
Out[49]:
index column value
3 3 A 400
4 0 B 100
この方法を使用すると、すべてのラベル付けと、関心のあるインデックスの値を保持できます。
余談ですが、最初にesを発見したときMultiIndex
、スライスパン以来の最高のものだと思いました. pandas
さまざまなタスクに定期的に使用した後、それらは のように動作し、 のように動作するため、しばしば障害になることがわかりましDataFrame
たIndex
。