我想不出一个办法来完成我的任务。我有一个包含3列的数据帧:length, reachcode, and year。
我的示例dataframe:
year reachcode length
1988 1000 1.2
1988 1000 2.0
1990 1000 0.3
1993 1000 0.5我试图找到一个年份内的“reachcode”重复项,然后对该年的“长度”求和。
之后,我想要比较不同年份的相同“reachcode”和“length”值的总和,并保留最小的值。
因此,在示例数据帧中,将1998年和reachcode = 1000的长度1.2和2.0相加,然后将该值(3.2)与1990和1993进行比较,并将值0.3和reachcode保留在新列表中。
我有一些使用Pandas的经验,但这是一项比我以前必须处理的更复杂的任务。我的真实数据帧大约有40,000行,因此找到一种自动化的方法来完成这项工作将非常有帮助。谢谢你的帮助。
发布于 2016-08-23 01:45:47
听起来你需要一个双阶段的groupby。首先按year和reachcode分组,并计算和,重置索引,以便可以进一步按reachcode分组,取length的最小值
df.groupby(['year', 'reachcode']).sum().reset_index().groupby('reachcode')['length'].min()
# reachcode
# 1000 0.3
# Name: length, dtype: float64发布于 2016-08-23 01:47:18
只需运行groupby聚合:
df['lengthsum'] = df.groupby(['year', 'reachcode'])['length'].transform(sum)
df['lengthmin'] = df.groupby(['reachcode'])['lengthsum'].transform(min)
# year reachcode length lengthsum lengthmin
# 0 1988 1000 1.2 3.2 0.3
# 1 1988 1000 2.0 3.2 0.3
# 2 1990 1000 0.3 0.3 0.3
# 3 1993 1000 0.5 0.5 0.3https://stackoverflow.com/questions/39085326
复制相似问题