熊猫集团只对一些团体进行了调整

时间:2016-01-11 17:52:11

标签: python pandas group-by

我有一个大型数据框,每个键都分配了一个值。但是,我确实有一个键具有多个值的情况,这些需要通过选择最大值来解决

示例(日期+测试是关键):

df = pd.DataFrame({'date':['1/1/16','1/2/16','1/1/16','1/1/16'],'test':['A','A','B','B'],'Val':[3,4,1,4]})
grouped = df.groupby(['date','test'])

我能做到:

agg = grouped.apply(lambda x: x[x['Val'] == x['Val'].max()])

然而,df是~400K条目,只有~300个键映射到多个值。我希望通过将违规密钥与其余密钥分开并在很小的集合上运行max然后重新组合来加快这个过程。

我可以算数:

ct = grouped.count()

但是如何使用它来索引该组?

这不起作用:

grouped[ct>1]

谢谢

[更新1]

这就是我的想法。

keys = ['date','test']
ct = pd.DataFrame()
ct['Count'] = grouped.apply(lambda x: len(x))
ct.reset_index(inplace=True)
df = pd.merge(df,ct,on=keys,how='inner')

现在,我可以根据计数为1或更大的数据将数据帧拆分为两个。 仍然很乐意听到有关如何做得更好的建议。

1 个答案:

答案 0 :(得分:0)

df['Max_Val'] = df.groupby(['date','test']).transform(lambda x: x.max() if x.size > 1 else x)

的产率:

   Val    date test  Max_Val
0    3  1/1/16    A        3
1    4  1/2/16    A        4
2    1  1/1/16    B        4
3    4  1/1/16    B        4

这是你追求的结果吗?