获取Pandas df

时间:2019-02-26 14:49:08

标签: pandas

当前,我正在尝试自动执行计划。 我将获得一个.csv文件的要求。 但是,天数按月变化,人员也偶尔变化,这意味着列数和行数不是固定的。

因此,我想将值“ *”作为标记表示表的末尾。不幸的是,我找不到以值作为参数并返回一个(列表)索引(列名,行名或索引号)的函数或方法。

有什么方法可以找到某个值的索引(或列表)?(例如坐标)

例如,当数据框如下所示时,

  |column_1 |column_2
------------------------
1 | 'a'     | 'b'
------------------------       
2 | 'c'     | 'd'      

如何通过值“ d”获得“ column_2”和“ 2”?类似于.loc或.iloc的相反内容。

2 个答案:

答案 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或其他内容。