我需要獲取 Pandas 數據框中包含值 == 1 的所有區域的單元格引用(row#、col#)。
import pandas as pd
import numpy as np
df = pd.DataFrame({'x': [np.nan, 1, np.nan, np.nan, 1],
'y': [np.nan, np.nan, np.nan, np.nan, 1],
'z': [1, np.nan, 1, np.nan, np.nan]})
希望獲得包含兩列的最終數據框: row & col 看起來像:
row col
0 1 1
1 4 1
2 4 2
3 0 3
4 2 3
您可以使用numpy.argwhere
.
這應該比使用for
循環df.stack
等的所有解決方案快得多。請參閱下面的時間:
In [145]: import numpy as np
In [146]: res = pd.DataFrame(np.argwhere(df.notnull().values).tolist(), columns=['row', 'col'])
In [147]: res.col = res.col + 1
In [148]: res
Out[148]:
row col
0 0 3
1 1 1
2 2 3
3 4 1
4 4 2
np.argwhere
:
In [149]: %timeit pd.DataFrame(np.argwhere(df.notnull().values).tolist(), columns=['row', 'col'])
437 µs ± 4.71 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
@sophocles 解決方案使用df.stack
:
In [151]: %timeit pd.DataFrame(df[df.notna()].stack().index.tolist(),columns=['row','col'])
1.33 ms ± 5.55 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句