Python 确定元素在数据帧中的位置
我正在搜索一个函数,该函数返回数据帧中元素的位置。 -数据帧中的值之间存在重复项 -数据帧约10*2000 -该函数将使用applymap()应用于数据帧 例如: get_位置(2)不清楚,因为它可能是“R1”或“R2”。我是 想知道python是否有其他方法知道 元素保持不变-可能在applymap()操作期间 编辑: df.秩(轴=1,pct=True) 编辑2: 步骤1) 步骤2) 步骤4)Python 确定元素在数据帧中的位置,python,pandas,dataframe,position,Python,Pandas,Dataframe,Position,我正在搜索一个函数,该函数返回数据帧中元素的位置。 -数据帧中的值之间存在重复项 -数据帧约10*2000 -该函数将使用applymap()应用于数据帧 例如: get_位置(2)不清楚,因为它可能是“R1”或“R2”。我是 想知道python是否有其他方法知道 元素保持不变-可能在applymap()操作期间 编辑: df.秩(轴=1,pct=True) 编辑2: 步骤1) 步骤2) 步骤4) 如果需要在数据帧中按值索引或列名称,请将其用于位置,然后选择转换为numpy数组的所有索引或列值:
如果需要在数据帧中按值索引或列名称,请将其用于位置,然后选择转换为numpy数组的所有索引或列值:
df = pd.DataFrame({"R1": [8,2,3], "R2": [2,3,4], "R3": [-3,4,-1]})
i, c = np.where(df == 2)
print (i, c)
[0 1] [1 0]
print (df.index.values[i])
[0 1]
print (df.columns.values[c])
['R2' 'R1']
编辑:
或:
编辑:
函数的解决方案-需要通过重塑和提取Series.name创建的一列数据帧进行迭代,与列名相同:
def get_column_name1(x):
return x.name
感谢您的快速回复!假设我正在用rank函数修改我的数据帧。这样,我在每一行中都有相同的值。有没有一种方法可以让我只显示一行的np.where(df==x),这样我就可以得到一对坐标?(参见有问题的编辑)@DieterMueller-那么您需要像一列一样的输出?或者同时使用两列,然后应用秩函数,如
cols=df.columns.values[c]
然后df[cols.rank(axis=1,pct=True)
?我最初有一个数据帧,其中包含的值范围约为[-0,05;+0,05]。然后我应用.rank()函数来获取x轴上的pct值。我现在遇到的下一步是,当我试图使用df.rank()从初始df中检索初始值时。这就是为什么我试图确定df.rank()中的位置,然后引用初始df。两个数据帧的测量值均为10*2000。@DieterMueller-请选中编辑。有点问题,预期的输出是什么?好的。在最后一步之后,如何获得初始数据帧(df)的值?我的意思是除去所有其他值后,每行中只有一个。在这种情况下。因此,最后我想根据df.rank()中的百分比值引用inital数据帧中的列名。你能理解吗?或者我的解释缺乏信息?非常感谢。
df_rank = df_initial.rank(axis=1,pct=True)
# Building Groups based on the percentage of the respective value
def function103(x):
if 0.0 <= x <= 0.1:
P1.append(get_column_name1(x))
return x
elif 0.1 < x <= 0.2:
P2.append(get_column_name1(x))
return x
elif 0.2 < x <= 0.3:
P3.append(get_column_name1(x))
return x
elif 0.3 < x <= 0.4:
P4.append(get_column_name1(x))
return x
elif 0.4 < x <= 0.5:
P5.append(get_column_name1(x))
return x
elif 0.5 < x <= 0.6:
P6.append(get_column_name1(x))
return x
elif 0.6 < x <= 0.7:
P7.append(get_column_name1(x))
return x
elif 0.7 < x <= 0.8:
P8.append(get_column_name1(x))
return x
elif 0.8 < x <= 0.9:
P9.append(get_column_name1(x))
return x
elif 0.9 < x <= 1.0:
P10.append(get_column_name1(x))
return x
else:
return x
# trying to get the columns Name of the the respective value
# my idea was to determine the Position of each value to then write a function
def get_column_name1(x)
#to return the values column Name
# apply the function
P1=[]
P2=[]
P3=[]
P4=[]
P5=[]
P6=[]
P7=[]
P8=[]
P9=[]
P10=[]
P11=[]
df_rank.applymap(function103).head()
df = pd.DataFrame({"R1": [8,2,3], "R2": [2,3,4], "R3": [-3,4,-1]})
i, c = np.where(df == 2)
print (i, c)
[0 1] [1 0]
print (df.index.values[i])
[0 1]
print (df.columns.values[c])
['R2' 'R1']
i, c = np.where(df == 2)
df1 = df.rank(axis=1,pct=True)
print (df1)
R1 R2 R3
0 1.000000 0.666667 0.333333
1 0.333333 0.666667 1.000000
2 0.666667 1.000000 0.333333
print (df1.iloc[i, c])
R2 R1
0 0.666667 1.000000
1 0.666667 0.333333
print (df1.where(df == 2).dropna(how='all').dropna(how='all', axis=1))
R1 R2
0 NaN 0.666667
1 0.333333 NaN
out = df1.stack()[df.stack() == 2].rename_axis(('idx','cols')).reset_index(name='val')
print (out)
idx cols val
0 0 R2 0.666667
1 1 R1 0.333333
def get_column_name1(x):
return x.name
P1=[]
P2=[]
P3=[]
P4=[]
P5=[]
P6=[]
P7=[]
P8=[]
P9=[]
P10=[]
P11=[]
def function103(x):
if 0.0 <= x[0] <= 0.1:
P1.append(get_column_name1(x))
return x
elif 0.1 < x[0] <= 0.2:
P2.append(get_column_name1(x))
return x
elif 0.2 < x[0] <= 0.3:
P3.append(get_column_name1(x))
return x
elif 0.3 < x[0] <= 0.4:
P4.append(get_column_name1(x))
return x
elif 0.4 < x[0] <= 0.5:
P5.append(get_column_name1(x))
return x
elif 0.5 < x[0] <= 0.6:
P6.append(get_column_name1(x))
return x
elif 0.6 < x[0] <= 0.7:
P7.append(get_column_name1(x))
return x
elif 0.7 < x[0] <= 0.8:
P8.append(get_column_name1(x))
return x
elif 0.8 < x[0] <= 0.9:
P9.append(get_column_name1(x))
return x
elif 0.9 < x[0] <= 1.0:
P10.append(get_column_name1(x))
return x
else:
return x
a = df_rank.stack().reset_index(level=0, drop=True).to_frame().apply(function103, axis=1)
print (P4)
['R3', 'R1', 'R3']