【问题标题】:get both unique count and max in group-by of pandas dataframe在 pandas 数据帧的 group-by 中同时获取唯一计数和最大值
【发布时间】:2017-01-04 08:08:27
【问题描述】:

使用 Pandas 数据框按功能分组,我想按列分组 c_b 和 (1) 计算列 c_a 和列 c_c 的唯一计数,(2) 并获得列 c_d 的最大值。想知道是否有任何解决方案可以编写一行代码来实现这两个目标?我试过下面这行代码,但似乎不正确。

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)

【问题讨论】:

  • .@lin ma SO 不是个人辅导服务!

标签: python python-2.7 pandas dataframe group-by


【解决方案1】:

您可以将字典传递给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'})

【讨论】:

  • 谢谢HYRY,看了几个相关的问题,不知道我们还能不能这样!凉爽的!尝试您的代码后又出现一个问题,我尝试在 group-by 和分配 sampleGroup = sample.groupby('c_b').agg({'c_a': 'nunique', 'c_c': 'nunique', 'c_d': 'max'}) 后打印 sampleGroup.columns,我发现 sampleGroup.columns 中只有 3 列,即 Index([u'c_a', u'c_c', u'c_d'], dtype='object'),想知道如何制作组键c_b 作为分组结果中的列之一?
  • 谢谢 HYRY,它对我有用。将您的回复标记为答案。 :)
猜你喜欢
  • 2020-06-24
  • 1970-01-01
  • 2020-02-02
  • 2023-03-07
  • 1970-01-01
  • 1970-01-01
  • 2018-10-22
  • 1970-01-01
  • 2022-01-20
相关资源
最近更新 更多