【发布时间】:2019-10-10 03:01:21
【问题描述】:
我是 Python 新手。我想从所有列中找到重复行索引的最大值(即 5 到 130),并在输出中显示其行和列索引标签。最大值应该是绝对的。 (与 + 或 - 号无关)。不同组中的行索引不应重复。 从每组中找到最大的值后,我想将这些值对角排列在方阵中。然后用主数据帧中每个组的相应索引值填充剩余的数组,并找到它的行列式。
df=pd.DataFrame(
{'0_deg': [43, 50, 45, -17, 5, 19, 11, 32, 36, 41, 19, 11, 32, 36, 1, 19, 7, 1, 36, 10],
'10_deg': [47, 41, 46, -18, 4, 16, 12, 34, -52, 31, 16, 12, 34, -71, 2, 9, 52, 34, -6, 9],
'20_deg': [46, 43, -56, 29, 6, 14, 13, 33, 43, 6, 14, 13, 37, 43, 3, 14, 13, 25, 40, 8],
'30_deg': [-46, 16, -40, -11, 9, 15, 33, -39, -22, 21, 15, 63, -39, -22, 4, 6, 25, -39, -22, 7]
}, index=[5, 10, 12, 101, 130, 5, 10, 12, 101, 130, 5, 10, 12, 101, 130, 5, 10, 12, 101, 130]
)
数据集:
预期输出:
我的代码只显示到输出 1。
实际输出:
代码:
df = pd.read_csv ('Matrixfile.csv')
df = df.set_index('Number')
def f(x):
x1 = x.abs().stack()
x2 = x.stack()
x = x2.iloc[np.argsort(-x1)].head(1)
return x
groups = (df.index == 5).cumsum()
df1 = df.groupby(groups).apply(f).reset_index(level=[1,2])
df1.columns = ['Number','Angle','Value']
print (df1)
df1.to_csv('Matrix_OP.csv', encoding='utf-8', index=True)
【问题讨论】:
-
我相信您的输出不正确。在
-52之后,第二组中的下一个最大数字是43。 不是41。除非我误解了。 -
@piRSquared - 是的,您是对的,但是如果您看到,即使第二组中的
43仅来自行索引101,我的查询是101在组中具有最大值3.即-71,所以它必须分配给第 3 组。谢谢。 -
@piRSquared - 为了您的理解,如果您能提供一些帮助,我已经编辑了我的输出。
-
@piRSquared - 您删除的代码与我的预期输出非常匹配。请您再次提供同样的信息。
标签: python pandas numpy matrix determinants