python - 在 pandas 数据框的分组中获得唯一计数和最大值

标签 python python-2.7 pandas dataframe group-by

使用 Pandas 数据框按功能分组,我想按 c_b 列分组,并且 (1) 计算 c_a 列和 c_c 列的唯一计数code>, (2) 并获取 c_d 列的最大值。想知道有没有办法写一行group by代码来实现这两个目标?我尝试了以下代码行,但它似乎不正确。

sampleGroup = sample.groupby('c_b')(['c_a', 'c_d'].agg(pd.Series.nunique), ['c_d'].agg(pd.Series.max))

我的预期结果是,

预期结果,

c_b,c_a_unique_count,c_c_unique_count,c_d_max
python,2,2,1.0
c++,2,2,0.0

谢谢。

输入文件,

c_a,c_b,c_c,c_d
hello,python,numpy,0.0
hi,python,pandas,1.0
ho,c++,vector,0.0
ho,c++,std,0.0
go,c++,std,0.0

源代码,

sample = pd.read_csv('123.csv', header=None, skiprows=1,
    dtype={0:str, 1:str, 2:str, 3:float})
sample.columns = pd.Index(data=['c_a', 'c_b', 'c_c', 'c_d'])
sample['c_d'] = sample['c_d'].astype('int64')
sampleGroup = sample.groupby('c_b')(['c_a', 'c_d'].agg(pd.Series.nunique), ['c_d'].agg(pd.Series.max))
results.to_csv(sampleGroup, index= False)

最佳答案

您可以将字典传递给 agg():

df.groupby('c_b').agg({'c_a':'nunique', 'c_c':'nunique', 'c_d':'max'})

如果你不希望c_b作为索引,你可以将as_index=False传递给groupby:

df.groupby('c_b', as_index=False).agg({'c_a':'nunique', 'c_c':'nunique', 'c_d':'max'})

关于python - 在 pandas 数据框的分组中获得唯一计数和最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39186843/

相关文章:

python - 终生无法安装 rpy2 - gcc 错误

python - 将对象(字符串)转换为 Int32 : TypeError: object cannot be converted to an IntegerDtype 时出错

python - 在所有行中附加多个 CSV 以及每个 CSV 的名称 - Python

python - 所有 pandas 列都显示为字符串

Python:只保留最后n个插入键的字典

python - NumPy - 一维数组最快的惰性字典序比较

python - 给定位置 (X,Y) 沿第三轴 (Z) 更新 Rank3 tensorflow 张量中的切片

python - 使用 urllib 和 pil 调整 url 图像大小

列名中带有空格的python数据框查询

Python:将 cumsum 和 product 应用于 pandas groupby