我是数据分析的新手,我想找到包含输入字符串的单元格位置。
示例:
forRoot
如何找到字符串“CAD 2.00”的位置。 要求的输出是(2,2)
答案 0 :(得分:3)
In [353]: rows, cols = np.where(df == 'CAD 2.00')
In [354]: rows
Out[354]: array([2], dtype=int64)
In [355]: cols
Out[355]: array([2], dtype=int64)
答案 1 :(得分:2)
按range
,stack
将列名称替换为数字,并且首次出现值idxmax
:
d = dict(zip(df.columns, range(len(df.columns))))
s = df.rename(columns=d).stack()
a = (s == 'CAD 2.00').idxmax()
print (a)
(2, 2)
如果要检查所有资产事项,请使用boolean indexing
并将MultiIndex
转换为list
:
a = s[(s == 'CAD 1.25')].index.tolist()
print (a)
[(0, 2), (1, 2)]
说明:
创建dict
以将列名称重命名为范围:
d = dict(zip(df.columns, range(len(df.columns))))
print (d)
{'Rate p/lot': 1, 'Price': 0, 'Total Comm': 2}
print (df.rename(columns=d))
0 1 2
0 947.20 1.25 CAD 1.25
1 129.30 2.10 CAD 1.25
2 161.69 0.80 CAD 2.00
然后stack
重新定位MultiIndex
位置:
s = df.rename(columns=d).stack()
print (s)
0 0 947.2
1 1.25
2 CAD 1.25
1 0 129.3
1 2.1
2 CAD 1.25
2 0 161.69
1 0.8
2 CAD 2.00
dtype: object
按string
比较:
print (s == 'CAD 2.00')
0 0 False
1 False
2 False
1 0 False
1 False
2 False
2 0 False
1 False
2 True
dtype: bool
获取True
的第一个MultiIndex
- 值的位置:
a = (s == 'CAD 2.00').idxmax()
print (a)
(2, 2)
另一种解决方案是将numpy.nonzero
用于检查值,将zip
值合在一起并转换为list
:
i, j = (df.values == 'CAD 2.00').nonzero()
t = list(zip(i, j))
print (t)
[(2, 2)]
i, j = (df.values == 'CAD 1.25').nonzero()
t = list(zip(i, j))
print (t)
[(0, 2), (1, 2)]
答案 2 :(得分:1)
一个简单的替代方案:
def value_loc(value, df):
for col in list(df):
if value in df[col].values:
return (list(df).index(col), df[col][df[col] == value].index[0])