Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用两个(或多个)值进行分组聚合_Python_Pandas - Fatal编程技术网

Python 使用两个(或多个)值进行分组聚合

Python 使用两个(或多个)值进行分组聚合,python,pandas,Python,Pandas,我想知道是否有一个很好的方法可以做到以下几点 我有一个带有country、user\u id、实际值、prediction 我想计算每个国家的准确度。精度方法需要两个阵列。一个用于实际值,一个用于预测值 将熊猫作为pd导入 从sklearn.metrics导入平衡的精度分数 df=pd.DataFrame( [ ('DEU','a',1,1), ('DEU','b',1,0), ('GBR','c',0,0), ('GBR','c',0,1), ], 列=['country'、'user\u i

我想知道是否有一个很好的方法可以做到以下几点

我有一个带有
country、user\u id、实际值、prediction

我想计算每个国家的准确度。精度方法需要两个阵列。一个用于实际值,一个用于预测值

将熊猫作为pd导入
从sklearn.metrics导入平衡的精度分数
df=pd.DataFrame(
[
('DEU','a',1,1),
('DEU','b',1,0),
('GBR','c',0,0),
('GBR','c',0,1),
],
列=['country'、'user\u id'、'actual\u value'、'prediction']
)
我知道我可以迭代地选择我想要的df切片并计算度量。我想知道我是否能以某种方式将这两个值(
实际值
预测值
)输入到聚合函数中

我想,我可以创建一个列,在元组中同时包含这两个值,这有点违背了熊猫的惯例。大概

df['actual_predictions']=df['actual_value','prediction']]。应用(lambda行:元组(行),轴=1)
然后为我的精度函数创建一个包装器,首先从元组中提取数组并调用度量

def acc_包装(实际预测):
实际值=[a代表a,u在实际值中u预测]
预测=[p表示u,p表示实际预测]
返回平衡精度分数(实际值、预测值)
然后做一些类似的事情

df.groupby('country').actuals\u predictions.agg(acc\u包装器)
国家
氘0.5
GBR 0.5
名称:e,数据类型:float64

但是我想知道是否有更高级的方法来实现这一点。

我们可以通过
balanced\u accurity\u score
将此函数传递给
apply

df['actuals_predictions'] = df.groupby('country').apply(lambda row: balanced_accuracy_score(row['actual_value'], row['prediction']), axis=1)

这太奇怪了,我从来没有在groupby之后使用过应用程序