python-3.x - Pandas:计算列上组的中位数

标签 python-3.x pandas

给定以下数据框:

import pandas as pd

df = pd.DataFrame({'COL1': ['A', 'A','A','A','B','B'], 
                   'COL2' : ['AA','AA','BB','BB','BB','BB'],
                   'COL3' : [2,3,4,5,4,2],
                   'COL4' : [0,1,2,3,4,2]})
df
    COL1    COL2    COL3    COL4
0    A       AA      2       0
1    A       AA      3       1
2    A       BB      4       2
3    A       BB      5       3
4    B       BB      4       4
5    B       BB      2       2

我想尽可能有效地(即通过 groupby 和 lambda x 或更好),为每个不同的第 1 列和第 2 列组找到第 3 列和第 4 列的中值。

期望的结果如下:
    COL1    COL2    COL3    COL4  MEDIAN
0    A       AA      2       0    1.5
1    A       AA      3       1    1.5
2    A       BB      4       2    3.5
3    A       BB      5       3    3.5
4    B       BB      4       4    3
5    B       BB      2       2    3

提前致谢!

最佳答案

您已经有了这个想法 - groupby COL1 和 COL2 并计算中位数。

m = df.groupby(['COL1', 'COL2'])[['COL3','COL4']].apply(np.median)
m.name = 'MEDIAN'

print df.join(m, on=['COL1', 'COL2'])

  COL1 COL2  COL3  COL4  MEDIAN
0    A   AA     2     0     1.5
1    A   AA     3     1     1.5
2    A   BB     4     2     3.5
3    A   BB     5     3     3.5
4    B   BB     4     4     3.0
5    B   BB     2     2     3.0

关于python-3.x - Pandas:计算列上组的中位数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35261838/

相关文章:

python - Pandas:根据除一行之外的其他多级列对最里面的列进行分组排序

python-3.x - 错误: "can' t multiply sequence by non-int of type 'float' "

python - 基于组计数的 Pandas 数据帧过滤

python-3.x - pandas:按列分组后如何获得第一个正数?

python - pandas 使用列子集时的SettingWithCopyWarning

python - 如何根据字典中的键/值增加 Python Pandas DataFrame

python - numpy:如何根据一维数组中的条件从两个二维数组中选取行?

python - 导入错误 : No module named 'resource'

sql-server - 从 Docker 内部访问外部 SQL 服务器

python - 如何将多类别数据框绘制为单个箱线图