Python如何从单个列中计算多个平均值,并根据另一列中的值选择要平均的行

卡尔·贝克

[编辑:重写问题在底部]

我试图弄清楚如何计算“部分列”平均值和计数,而不是使用所有值。在伪SQL中,我想要SELECT所有值WHERE id = 10,然后= 20,依此类推。我假设有一种不使用for循环的pythonic(pandastic?)方法。

例如:df有3列和数千行:caseid,和value大小写是唯一的,id可以重复,值是数字。

case    id  value
1       10  100
2       10  500
3       20  200
4       20  150
5       20  125

我要计算值并计算每个值的平均值,id然后将它们放在新列中。

case    id  value   n_vals  av_val
1       10  100     2       300
2       10  500
3       20  300     3       200
4       20  150
5       20  150

然后删除casevalue为每个ID保留一行(它们现在是唯一的):

id  n_vals  av_val
10  2       300
20  3       200

我知道如何找到lenmean为整个列,但不知道如何做了这样的部分列。


[重写的问题]:

我在7个变量中具有20000265 obs的df。case是唯一的,Id可以重复。:

case        Id      title           n_words n_chars rating  rating2
20000260    131258  The Pirates     2       11      2.5     2.5
20000261    131258  The Pirates     2       11      3.5     3.5
20000262    131258  The Pirates     2       11      4.5     4.5
20000263    131260  Rentun Ruusu    2       12      3       3
20000264    131260  Rentun Ruusu    2       12      5       5
20000265    131262  Innocence       1       9       4       4

我想计算每个等级的评分和平均评分Id这些值被添加到DF为n_ratingsav_rating,取代ratingrating2,聚集在一个单独的行,每个Id我想保留所有其他列,生成如下内容:

case        Id      title           n_words n_chars n_ratings   av_rating
20000260    131258  The Pirates     2       11      3           3.5
20000263    131260  Rentun Ruusu    2       12      2           4
20000265    131262  Innocence       1       9       1           4

基于下面的@ U9_Forward的答案,我已经尝试过:

df = 
    (df.
        groupby('Id', as_index = False).
        agg({'rating':'count', 'rating2':'mean'}).
        # rename(columns = {'rating':'n_ratings', 'rating2':'av_rating'}))
        rename(columns = {'Id':'Id', 'title':'title',
                      'num_words':'num_words', 'num_chars':'num_chars',
                      'rating':'n_ratings', 'rating2':'av_rating'}, axis=1))

然而,这仅保留了3列(Idn_ratingsav_rating)在中使用的groupby().agg()管,例如:

0   1   49695       3.921240
1   2   22243       3.211977
2   3   12735       3.151040

我尝试在rename()字典中包括所有col名称,但得到了相同的结果。

两个问题:

  1. 是否有参数agg()或以其他方式实现预期结果?
  2. 我在Jupyter中获得了FutureWarning,并已阅读使用rename()不推荐使用的字典,或者很快就会使用。重命名cols的新首选方式是什么?
U10转发

只需groupbyagg和一起使用rename

print(df.groupby('id',as_index=False).agg({'case':'count','value':'mean'}).rename({'case':'n_vals','value':'av_val'},axis=1))

输出为:

   id  n_vals  av_val
0  10       2     300
1  20       3     200

编辑:

df[['n_ratings','av_rating']]=df[['Id','title']].join(df.groupby(['Id','title']).agg({'rating':'count','rating2':'mean'}), on=['Id','title'])[['rating','rating2']]
print(df.drop_duplicates(keep='last',subset='Id'))

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在熊猫中获取使用另一列值选择的行的平均值

SQL-根据选择行之间另一列的平均值获取列值

根据熊猫中的另一列计算一列的平均值

根据另一列中的其他 ID 计算 R 中列的平均值

根据另一列中的值获取每列的平均值

根据r中另一列的条件计算每小时平均值

如何根据R中另一列的日期(月/日/年)计算列的年/月平均值、最大值、最小值等

如何基于python(pandas,jupyter)中的另一列值获取一列的平均值

如何根据R中的另一列获取列的平均值

计算一列重复观察的平均值,但另一列的值不同

如何计算在熊猫中另一列上分组的平均值

Pandas/Python groupby 然后计算每组中另一列的平均值

一列中的值的平均值,另一列中的唯一值

根据R中另一列的日期范围查找一列的平均值

根据另一列计算列的平均值

计算使用另一个数组中的值选择的numpy矩阵的行的按列平均值

如何计算一列中的n个值和整体平均值?

如何通过考虑另一列中的信息来计算一列中的平均值?

从多个CSV文件计算一列的平均值

熊猫分组多个列根据条件取另一列的平均值

如何使用熊貓中另一列的值獲取所選行的平均值

pandas当另一列与python中的值匹配时,只获取一列的平均值(浮动)值

计算按另一列值分组的列平均值的新表

计算列中同一行内多个值的平均值

如何基于Julia中一列中的值查找数据框的行的平均值?

从每一列中选择具有相同值的平均值,在另一列中选择最大值的平均值

如何根据另一列获取数据框列的平均值?

计算文件中每一列的平均值

Groupby 多列计算大小并计算 Pandas 中另一列的平均值