[编辑:在底部重写问题]
我试图弄清楚如何计算“部分列”平均值和计数,而不是使用所有值。在伪 SQL 中,我想SELECT
所有值WHERE id = 10
,然后= 20等。我假设有一种Pythonic(pandastic?)方法在不使用 for 循环的情况下执行此操作。
示例:df
有 3 列和数千行:case
、id
和 value
。 case 唯一,id 可以重复,value 为数字。
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
。 。 。然后删除 case
和 value
并为每个 id 只保留一行(现在是唯一的):
id n_vals av_val
10 2 300
20 3 200
我知道如何查找整个列的 len
和 mean
,但不知道如何查找像这样的部分列。
[重写问题]:
我有一个 df,有 7 个变量,有 20000265 个 obs。 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
的评分数量和平均评分。这些值作为 n_ ratings
和 av_ rating
添加到 df,替换 rating
和 rating2
,聚合在单行上对于每个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))
但是,这仅保留在 groupby( ).agg()
管道,例如:
0 1 49695 3.921240
1 2 22243 3.211977
2 3 12735 3.151040
我尝试在 rename()
字典中包含所有列名称,但得到了相同的结果。
两个问题:
- 是否有
agg()
的参数或其他方法来实现 想要的结果? - 我在 Jupyter 中收到 FutureWarning 并已阅读该内容
使用带有
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'))
关于Python 如何计算单列的多个平均值,根据另一列中的值选择要平均的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53953316/