我想获取Pandas数据框中每个单元格的索引和列名。
例如,在下面的代码生成的数据框中
df = pd.DataFrame({1 : np.arange(1, 6),
2 : np.arange(6, 11),
3 : np.arange(11, 16),
4 : np.arange(16, 21),
5 : np.arange(21, 26)},
index=[1, 2, 3, 4, 5])
我想访问值的行索引和值的列名的索引/列名组合,例如[1,1]表示1,[2,1]表示2,[3,1]表示3等...
最终目标是使用df.apply()根据其在数据框中的位置来更新数据框中的每个值。需要索引和列名(n x n数据帧中的等效标识符和有序标识符)才能从另一个数据帧提取值。
谢谢!
最佳答案
我建议使用自己的函数来执行此操作。您可以使用类似dict的符号访问数据框的每一列。除了通过访问所需的索引/行来获取所需的元素外,我还将使用.ix
,如下所示
import pandas as pd
df = pd.DataFrame({1 : np.arange(1, 6),
2 : np.arange(6, 11),
3 : np.arange(11, 16),
4 : np.arange(16, 21),
5 : np.arange(21, 26)},
index=[1, 2, 3, 4, 5])
def get_from_coords(df, x, y):
return df[x].ix[y]
因此,例如:
In [2]: get_from_coords(df, 2, 1)
Out[2]: 6
该文档提供有关indexing pandas dataframes的详细信息。
由于我误解了评论中阐明的问题,因此进行了更新:
def look_for_value(df, value):
l = []
for row in df.itertuples():
print(row)
if value in row[1:]:
# appending a tuple of the format `(index name, column name)`
l.append((row[0], df.columns[row.index(value)-1]))
return l
def look_using_generator(df, value):
return [(row[0], df.columns[row.index(value)-1]) for row in df.itertuples() if value in row[1:]]
我使用比
.itertuples()
更快的.iterrows()
遍历数据帧的所有行,并寻找所需的条目/值。如果在行中找到该值,则将包含索引和列名的元组存储到列表中,该列表最后返回。我在第一个函数中提供了一种逐步解决方案,并在列表理解中使用生成器提供了一个单行代码。编辑,因为OP指出他需要具有列名和索引名才能更改相应的值:
假设我们要查找所有值
6
并将其替换为66
:for item in look_using_generator(df, 6):
df[item[0]].ix[item[1]] = 66
关于python - 获取数据帧的所有单元格作为(索引,列)的元组,以传递给df.apply(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35108108/