我无法想出一种完成任务的方法。我有一个包含3列的数据框:length, reachcode, and year
。
我的示例数据框:
year reachcode length
1988 1000 1.2
1988 1000 2.0
1990 1000 0.3
1993 1000 0.5
我试图在一年内找到'覆盖码'重复,然后总计那一年的“长度”。
之后我想比较相加的'长度'值与不同年份的相同'到达码'并保持最小值。
因此,在示例数据框中,长度1.2和2.0将对1998年和reachcode = 1000
进行求和,然后将该值(3.2)与1990和1993进行比较,值为0.3并保留到达代码在新名单中。
我对Pandas有一些经验,但这是一项比我以前不得不处理的更复杂的任务。我的实际数据帧大约有40,000行,因此找到一种自动执行此操作的方法非常有用。谢谢你的帮助。
答案 0 :(得分:2)
听起来你需要一个双阶段groupby
。首先分组year
和reachcode
并计算总和,重置索引,以便您可以进一步分组reachcode
以获取length
的分钟:
df.groupby(['year', 'reachcode']).sum().reset_index().groupby('reachcode')['length'].min()
# reachcode
# 1000 0.3
# Name: length, dtype: float64
答案 1 :(得分:2)
只需运行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.3