python - Pandas 数据框中满足特定条件的所有行的平均值

标签 python pandas

假设我有数据框:

    Code  Value
1   X     135
2   D     298
3   F     301
4   G     12
5   D     203
6   X     212
7   D     401
8   D     125

我想在此数据框中创建一个新列,用于计算数据框中所有行的平均值,其中“代码”列中的值是每行中的相应值。

例如,在第 1 行中,“平均值”列将查找代码为“X”的所有行的平均值

最佳答案

您可以这样使用 pd.Series.map():

df['Code_mean'] = df.Code.map(df.groupby(['Code']).Value.mean())

>>> df
Out[]:
  Code  Value  Code_mean
1    X    135     173.50
2    D    298     256.75
3    F    301     301.00
4    G     12      12.00
5    D    203     256.75
6    X    212     173.50
7    D    401     256.75
8    D    125     256.75

这似乎比transform 方法更快。


编辑:回答评论的基准

import pandas as pd
from string import ascii_letters

df = pd.DataFrame(columns=['Code', 'Value'])
df.Code = [ascii_letters[26:][i] for i in np.random.randint(0, 26, 10000)]
df.Value = np.random.randint(0, 1024, 10000)

>>> %%timeit
... df['Code_mean'] = df.Code.map(df.groupby(['Code']).Value.mean())
1000 loops, best of 3: 1.45 ms per loop

# Reinit df before next timeit

>>> %%timeit
... df.assign(Code_mean=df.groupby('Code').transform('mean'))
100 loops, best of 3: 2.31 ms per loop

但是在测试结果确实支持对更大的数据帧(10^6 行)进行转换

import pandas as pd
from string import ascii_letters

df = pd.DataFrame(columns=['Code', 'Value'])
df.Code = [ascii_letters[26:][i] for i in np.random.randint(0, 26, 1000000)]
df.Value = np.random.randint(0, 1024, 1000000)

>>> %%timeit
... df['Code_mean'] = df.Code.map(df.groupby(['Code']).Value.mean())
10 loops, best of 3: 95.2 ms per loop

# Reinit df before next timeit

>>> %%timeit
... df.assign(Code_mean=df.groupby('Code').transform('mean'))
10 loops, best of 3: 68.2 ms per loop

关于python - Pandas 数据框中满足特定条件的所有行的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46042786/

相关文章:

python - 如何删除 python 数据框中最后一个下划线后的字符串?

Python:一旦找到真值,any() 是否会停止迭代列表/生成器?

python - 如何通过在后台运行的程序读取参数?

python - 将变量从 View 传递到表单

python - 根据两个值之间的索引填充 Pandas 数据框

python - 使用 pyodbc 从 SQL Server 中提取的数据行是 "unhashable type"

python - 如何根据子列表的长度对列表列表进行排序

python - 使用 pandas 进行数据增强

python - 将行添加到现有 pandas 数据框的最快方法

Python/Pandas 在一列的上方/下方找到最接近的值