当前,我正在尝试自动执行计划。 我将获得一个.csv文件的要求。 但是,天数按月变化,人员也偶尔变化,这意味着列数和行数不是固定的。
因此,我想将值“ *”作为标记表示表的末尾。不幸的是,我找不到以值作为参数并返回一个(列表)索引(列名,行名或索引号)的函数或方法。
有什么方法可以找到某个值的索引(或列表)?(例如坐标)
例如,当数据框如下所示时,
|column_1 |column_2
------------------------
1 | 'a' | 'b'
------------------------
2 | 'c' | 'd'
如何通过值“ d”获得“ column_2”和“ 2”?类似于.loc或.iloc的相反内容。
答案 0 :(得分:1)
如果我了解您要查找的内容:在数据框中找到值的(索引值,列位置)。您可以在循环中使用列表理解。如果您的数据框很大,可能不会最快。
# assume this dataframe
df = pd.DataFrame({'col':['abc', 'def','wert','abc'], 'col2':['asdf', 'abc', 'sdfg', 'def']})
# list comprehension
[(df[col][df[col].eq('abc')].index[i], df.columns.get_loc(col)) for col in df.columns for i in range(len(df[col][df[col].eq('abc')].index))]
# [(0, 0), (3, 0), (1, 1)]
如果需要列值而不是位置,请将df.columns.get_loc
更改为col
:
[(df[col][df[col].eq('abc')].index[i], col) for col in df.columns for i in range(len(df[col][df[col].eq('abc')].index))]
# [(0, 'col'), (3, 'col'), (1, 'col2')]
答案 1 :(得分:1)
有趣的问题。我还使用了列表推导,但是使用了np.where
。如果没有那么笨拙的方法,我仍然会感到惊讶。
df = pd.DataFrame({'column_1':['a','c'], 'column_2':['b','d']}, index=[1,2])
[(i, np.where(df[i] == 'd')[0].tolist()) for i in list(df) if len(np.where(df[i] == 'd')[0]) > 0]
> [[('column_2', [1])]
请注意,它将返回数字索引(从0开始),而不是自定义索引(从1开始)。如果您有固定的偏移量,则可以在输出中添加+1
或其他内容。