我试图按组计算两列之间的协方差。我正在做以下事情:
A = pd.DataFrame({'group':['A','A','A','A','B','B','B'],
'value1':[1,2,3,4,5,6,7],
'value2':[8,5,4,3,7,8,8]})
B = A.groupby('group')
B['value1'].cov(B['value2'])
理想情况下,我想获得X和Y之间的协方差,而不是整个方差 - 协方差矩阵,因为我只有两列。
谢谢,
答案 0 :(得分:4)
您几乎就在那里,只是您不清楚了解groupby对象,有关详细信息,请参阅Pandas-GroupBy。
对于您的问题,如果我理解正确,您希望计算同一组中两列之间的cov。
最简单的方法是使用groupeby.cov
函数,它可以在组之间提供成对的cov。
A.groupby('group').cov()
value1 value2
group
A value1 1.666667 -2.666667
value2 -2.666667 4.666667
B value1 1.000000 0.500000
value2 0.500000 0.333333
如果您只需要cov(grouped_v1,grouped_v2)
grouped = A.groupby('group')
grouped.apply(lambda x: x['value1'].cov(x['value2']))
group
A -2.666667
B 0.500000
其中,grouped
是groupby
个对象。对于grouped.apply
函数,它需要一个回调函数作为参数,每个组都将是回调函数的参数。这里,回调函数是lambda
函数,参数x
是一个组(DataFrame)。
希望这有助于您理解groupby。
答案 1 :(得分:2)
以下代码为您提供了分组方差 - 协方差矩阵。您可以根据需要对其进行子集化以获得协方差。
import pandas as pd
A = pd.DataFrame({'group':['A','A','A','A','B','B','B'],
'value1':[1,2,3,4,5,6,7],
'value2':[8,5,4,3,7,8,8]})
print A.groupby('group').cov()
答案 2 :(得分:0)
如果您要查找特定两列的from sagemaker.tensorflow import TensorFlow
tf_estimator = TensorFlow(entry_point='autoencoder-model.py',
role=role,
instance_count=1,
instance_type='ml.m5.large',
framework_version="2.3.0",
py_version="py37",
debugger_hook_config=False,
hyperparameters={'epochs': 20},
source_dir='/home/ec2-user/SageMaker/model',
subnets=['subnet-1', 'subnet-2'],
security_group_ids=['sg-1', 'sg-1'])
,则可以使用cov()
假设Age和薪水是dataFrame的许多列中的两个。这仅对两列有用。