我正在使用Python熊猫执行以下操作。我有一个F列和r行的数据框。此数据框中的所有字段均为数字。一列表示每一行所属的组。例如:
df = pd.DataFrame({'group': [1, 2, 1, 0, 0, 0, 1, 2],
'A': [1.5, 0.5, 2.5, 0.5, 1.5, 0.5, 1.5, 0.5],
'B': [3.5, 2.5, 3.5, 2.5, 3.5, 2.5, 3.5, 2.5]})
对于每个小组,我需要:
normalised_df = df.groupby(['group'], group_keys=True, axis=0).apply(lambda x: x - np.mean(x))
group A B
0 1 -0.333333 0.000000
1 2 0.000000 0.000000
2 1 0.666667 0.000000
3 0 -0.333333 -0.333333
4 0 0.666667 0.666667
5 0 -0.333333 -0.333333
6 1 -0.333333 0.000000
7 2 0.000000 0.000000
例如第0组:
Group 0 transposed:
[-0.333333 0.666667 -0.333333
-0.333333 0.666667 -0.333333]
multiplied by itself:
[-0.333333 -0.333333
0.666667 0.666667
-0.333333 -0.333333]
to give a 2x2 matrix
[0.666 0.666
0.666 0.666]
对于步骤2,我尝试了
transposed_df = df.groupby(['group']).apply(lambda x: np.transpose(x)*x)
哪些错误是因为形状未对齐(按预期)。
预期结果将是一个大小为F乘F的矩阵。它可以是一个numpy矩阵(因为这将更适合而不是数据框)。以上述数字为例,
[1.3333 0.6666
0.6666 0.6666]
关于如何执行此操作的任何建议?
答案 0 :(得分:3)
如果可能要进行矩阵乘法,请使用h
运算符,并在@
的第二级上每秒使用sum
:
MultiIndex
答案 1 :(得分:0)
您可以使用df.T转置数据框
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.transpose.html
您可以使用df.dot将数据框与另一个数据框点积。
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.dot.html
您可以使用df.mul将一个数据框与另一个数据框进行矩阵乘(元素乘)
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.mul.html