我有一个唯一字符串的数据框,我想找到给定字符串的行和列。我想要这些值,因为我最终会将此数据框导出到Excel电子表格中。到目前为止,我发现获取这些值的最简单方法是:
jnames = list(df.iloc[0].to_frame().index)
for i in jnames:
for k in df[i]:
if 'searchstring' in str(k):
print('Column: {}'.format( (jnames.index(i) + 1 ) ) )
print('Row: {}'.format( list( df[i] ).index('searchstring') ) )
break
任何人都可以建议一个能够更好地利用熊猫固有能力的解决方案吗?
答案 0 :(得分:1)
如果没有可重现的代码/数据,我将构建一个数据框并显示一种简单的方法:
<强>设置强>
import pandas as pd, numpy as np
df = pd.DataFrame([['a', 'b', 'c'], ['d', 'e', 'f'], ['g', 'h', 'b']])
数据框如下所示:
0 1 2
0 a b c
1 d e f
2 g h b
<强>解决方案强>
result = list(zip(*np.where(df.values == 'b')))
<强>结果强>
[(0, 1), (2, 2)]
<强>解释强>
df.values
访问数据框底层的numpy
数组。np.where
创建一个满足所提供条件的坐标数组。zip(*...)
将[x-coords-array, y-coords-array]
转换为(x, y)
坐标对。答案 1 :(得分:0)
尝试使用contains。这将返回包含您要查找的切片的行的数据框。
df[df['<my_col>'].str.contains('<my_string_slice>')]
同样,您可以使用match进行直接匹配。
答案 2 :(得分:0)
这是我的方法,不写双循环:
value_to_search = "c"
print(df[[x for x in df.columns if value_to_search in df[x].unique()]].index[0])
print(df[[x for x in df.columns if value_to_search in df[x].unique()]].columns[0])
第一个将返回列名,第二个将返回索引。组合在一起,您将获得索引列组合。由于您提到df中的所有值都是唯一的,因此两行都只返回一个值。
您可能需要尝试 - 除非value_to_search
可能不在数据框中。
答案 3 :(得分:0)
通过使用堆栈,来自jpp的数据
{{1}}